本篇属于高级SQL优化系列专题中的一篇,高级SQL优化系列专题介绍PawSQL引擎优化算法原理及优化案例,欢迎大家订阅。
本文介绍PawSQL及数据库优化器中实现的SAT-TC(Satisfiability-Transitive Closure) 重写优化,SAT-TC重写优化会分析一组谓词,并试图判断:
c_custkey=1 AND c_custkey=0),或者c_custkey=1 AND c_custkey=o_custkey 意味着 o_custkey=1)。c_custkey <> c_custkey or c_name = 'b' 可以简化为 c_name = 'b')SAT优化与TC优化其实是两个单独的重写优化方法,但是它们两个联系紧密且经常相互作用,所以他们常在一起被使用。
传递闭包优化(TC)指的是从现有的谓词集合中推断出新的谓词。
示例
select o_custkey as cust_no, l_extendedprice * (1 - l_discount)
from orders, lineitem
where l_orderkey = o_orderkey
and l_orderkey = 'ORD1234';select o_custkey as cust_no, l_extendedprice * (1 - l_discount)
from orders, lineitem
where l_orderkey = o_orderkey
and l_orderkey = 'ORD1234'
and o_orderkey = 'ORD1234';PawSQL支持的TC优化包括:

SAT优化对查询条件进行逻辑演算简化,分析条件表达式是否存在矛盾或重叠,移除冗余和不可能成立的条件,用简化后的表达式替换原条件。
示例:
select c.c_name FROM customer c
where c.c_name = 'John' and c.c_name = 'Jessey'select c.c_name from customer as c where 1 = 0PawSQL支持的SAT优化包括:

其中:
注:所有的SAT及TC的基础规则可以相互触发,直至无法进行进一步转换或简化。
PawSQL专注数据库性能优化的自动化和智能化,支持MySQL,PostgreSQL,openGauss,Oracle等,提供的SQL优化产品包括