Oracle 2005 年出了一个 30 多页的小册子,《Query Optimization in Oracle Database10g Release 2》,介绍了常见的优化器技术。
我是做 SQL 执行的,优化部分只了解皮毛,从没有系统学习过。本系列逐个学习和介绍,自我提升,也帮助他人。
一个复杂 query 里可能包含多个视图和子查询(下称语句块),在它们的内部和外面还有很多谓词。
- 谓词下推是指将外面的谓词条件下推到语句块内部,降低结果集大小、扩大优化空间;
- 谓词上拉是指把谓词从一个语句块里复制提取出来,然后下压到其它语句块中。
本文是初级介绍文档,不深入探讨谓词下推、上拉的条件,仅聊一下它的意义:
- 通过把 WHERE 条件传递到各个语句块,能降低各个阶段输出的数据量,使得后继的 join、group by 等操作代价更小;
- WHERE 条件更多之后,可能会打开更多的访问空间,生成更优的计划