在《sql 改写系列九:外连接转内连接的常见场景与错误》中,我们知道当谓词可以过滤掉连接结果中因为连接而补null的行时,可以把外连接转换为内连接,如图1中路径(a)所示。这时聪明的你肯定会问:谓词能...
引言查询分析中经常使用子查询语句,数据库为了提高子查询的执行性能,往往会把子查询语句改写成半连接(子查询提升方法参见本系列第二篇:子查询提升首篇)。例如,我们需要查询2022-08-01到2022-08-02之间已排片的电影,可以通过in子查询检查电影是否在排片期内。查询sql如q1所示。
本文主要介绍了一些外连接转内连接的策略,外连接转内连接对于数据库查询优化器而言是不可或缺的。内连接允许更多的连接顺序选择、基表谓词条件下压,有助于查询优化器选择到更好的查询执行计划,提升查询效率。因此,外连接转内连接是一项非常重要的优化技术。
本文根据连接方式,简要介绍了外连接消除、内连接消除和半连接/反连接消除三类消除场景,并根据连接的条件,引入了主键/主外键消除、自连接消除和恒false连接消除。
本文主要介绍了谓词移动的技术。它包含两个方面,谓词下推和谓词上拉。前者负责尽可能提前去执行过滤谓词,减少后续操作需要处理的数据量;后者主要构造更多的谓词来参与推导过程,强化推导的效果。谓词推导和谓词移动是互相协作、互相强化的,它们是非常重要的两项谓词优化技术。
推导新谓词对查询优化而言是非常重要的,基于新的谓词,查询优化器可以选择更好的索引,生成更好的基表访问路径。因此,谓词推导是一项非常重要的优化技术,本文将会向大家介绍一些谓词的推导方式,希望能够对大家有所帮助。
为了获得更好的优化结果,oceanbase 会进行 “视图合并”,即在面对连接的对象中有视图,或者内联视图的情况时,我们不去等待视图把结果运行出来再连接,而是把视图中的表、过滤条件及其它子句合并到父查询中。对 q1 合并之后,三张表将属于同一个查询块,优化器可以更加灵活地调整它们的连接次序。 本文将主要介绍 oceanbase 在视图合并上的一些设计与实践。下文会首先从简单的场景开始,讲解如何改写一个仅包含 select-from-where 的视图;之后会拓展到更复杂的场景,最后再讲解如何改写一个带 group-by 的视图。
本文主要介绍了分组下压的查询改写策略,通过将一些分组运算先于连接执行,下压到单个表中去缩小数据集,减少参与连接运算的数据规模,提升查询性能。
本次查询改写系列不仅包括子查询优化、聚合函数优化、 窗口函数优化、 复杂表达式优化四大模块,还有更多模块内容,敬请期待。
本期文章我们将介绍一种针对第二类子查询的改写方式。