SQL优化技巧 - SAT-TC重写优化
· 阅读需 5 分钟
定义
SAT-TC(Satisfiability-Transitive Closure) 重写优化会分析一组谓词,并试图判断:
-
谓词间是否存在矛盾(例如
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优化是两个联系紧密且相互作用的优化方法,他们常在一起被使用。
收益
-
数据库避免了不必要的谓词评估
-
为数据库优化器的规划提供额外的候选路径
-
可以其他重写优化规则
-
为PawSQL的索引推荐提供更多候选列
传递闭包(Transitive Closure)优化
传递闭包优化指的是从谓词集中推断出新的谓词,从而可以在执行计划生成的时候生成更优的执行计划。
传递闭包优化示例
- 原查询
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优化包括:
- 等值过滤条件推导 (
t1.c = t2.c and t1.c = 1
推导出新的条件t2.c = 1
)。 - 等值关联条件的推导 (
t1.c = t2.c AND t2.c = t3.c
推导出新的条件t3.c = t1.c
)。 - 范围条件推导 (
t1.c = t2.c and t1.c > 1
推导出新的条件t2.c > 1
)。 - IN值条件推导 (
t1.c = t2.c and t1.c IN (1, 2)
推导出新的条件t2.c IN (1,2)
)。
Satisfiability(SAT)优化
Satisfiability优化对查询条件进行逻辑演算简化,分析条件表达式是否存在矛盾或重叠,移除冗余和不可能成立的条件,用简化后的表达式替换原条件。
Satisfiability示例:
- 原查询
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 = 0
PawSQL支持的SAT优化包括
表定义中的约束 | 原始谓词 | 简化后谓词 |
---|---|---|
T.C =、>=、<= T.C | T.C IS NOT NULL | |
T.C <>、>、< T.C | 1= 0 | |
(1 = 0)AND Condition | 1= 0 | |
(1 = 0)OR Condition | Condition | |
(1 = 1)AND Condition | Condition | |
(1 = 1)OR Condition | 1 = 1 | |
T.C 不可以为NULL | T.C IS NULL | 1= 0 |
T.C 可以为NULL | T.C IS NULL AND T.C opr 'a' | 1 = 0 |
T.C 可以为NULL | T.C IS NOT NULL AND T.C opr 'a' | T.C = 'a' |
T.C 可以为NULL | T.C IS NOT NULL or T.C opr 'a' | T.C IS NOT NULL |
T.C 不可以为NULL | T.C IS NULL or T.C opr 'a' | T.C opr 'a' |
T.C 不可以为NULL | T.C IS NOT NULL or T.C opr 'a' | 1 = 1 |
其中:
Condition为任意条件
T.C opr 'constant'为任意NULL拒绝条件,opr可以为 =,>, >=, <, <=,IN, between等操作符
T.C 为数据库中表T的C列.
关于PawSQL
PawSQL专注数据库性能优化的自动化和智能化,支持MySQL,PostgreSQL,openGauss,Oracle等,提供的SQL优化产品包括
- PawSQL Cloud,在线自动化SQL优化工具,支持SQL审查,智能查询重写、基于代价的索引推荐,适用于数据库管理员及数据应用开发人员,
- PawSQL Advisor,IntelliJ 插件, 适用于数据应用开发人员,可以IDEA/DataGrip应用市场通过名称搜索“PawSQL Advisor”安装。
- PawSQL Engine, 是PawSQL系列产品的后端优化引擎,可以以docker镜像的方式独立安装部署,并通过http/json的接口提供SQL优化服务。
联系我们
Twitter: https://twitter.com/pawsql
扫描关注PawSQL公众号