跳到主要内容

SQL优化技巧 - SAT-TC重写优化

· 阅读需 5 分钟
PawSQL Team
Optimize your SQL Queries by Clicks!

定义

SAT-TC(Satisfiability-Transitive Closure) 重写优化会分析一组谓词,并试图判断:

  1. 谓词间是否存在矛盾(例如 c_custkey=1 AND c_custkey=0),或者

  2. 是否可以从谓词集中推断出新的谓词(例如 c_custkey=1 AND c_custkey=o_custkey 意味着 o_custkey=1)。

  3. 谓词是否可以简化(例如 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优化包括:

  1. 等值过滤条件推导 ( t1.c = t2.c and t1.c = 1 推导出新的条件 t2.c = 1)。
  2. 等值关联条件的推导 ( t1.c = t2.c AND t2.c = t3.c推导出新的条件 t3.c = t1.c)。
  3. 范围条件推导 ( t1.c = t2.c and t1.c > 1 推导出新的条件 t2.c > 1)。
  4. 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.CT.C IS NOT NULL
T.C <>、>、< T.C1= 0
(1 = 0)AND Condition1= 0
(1 = 0)OR ConditionCondition
(1 = 1)AND ConditionCondition
(1 = 1)OR Condition1 = 1
T.C 不可以为NULLT.C IS NULL1= 0
T.C 可以为NULLT.C IS NULL AND T.C opr 'a'1 = 0
T.C 可以为NULLT.C IS NOT NULL AND T.C opr 'a'T.C = 'a'
T.C 可以为NULLT.C IS NOT NULL or T.C opr 'a'T.C IS NOT NULL
T.C 不可以为NULLT.C IS NULL or T.C opr 'a'T.C opr 'a'
T.C 不可以为NULLT.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优化服务。

联系我们

网址: https://app.pawsql.com

邮件:service@pawsql.com

Twitter: https://twitter.com/pawsql

扫描关注PawSQL公众号dd