暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

高级SQL优化 | SAT-TC重写优化

PawSQL 2023-11-24
218

本篇属于高级SQL优化系列专题中的一篇,高级SQL优化系列专题介绍PawSQL引擎优化算法原理及优化案例,欢迎大家订阅。

定义

本文介绍PawSQL及数据库优化器中实现的SAT-TC(Satisfiability-Transitive Closure) 重写优化,SAT-TC重写优化会分析一组谓词,并试图判断:

  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的索引推荐提供更多候选列

TC (Transitive Closure) 优化

传递闭包优化(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(Satisfiability) 优化

      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 = 0

          PawSQL支持的SAT优化包括:

          其中

          • Condition为任意条件表达式或是表达式的组合;
          • T.C opr  'constant' 为任意的NFC(NULL拒绝条件),opr可以为 =,>, >=, <, <=,IN, BETWEEN等操作符;
          • T.C 为数据库中表T的C列。

          注:所有的SAT及TC的基础规则可以相互触发,直至无法进行进一步转换或简化。

          关于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://www.pawsql.com

          邮件:service@pawsql.com

          Twitter: https://twitter.com/pawsql

          关注PawSQL公众号


          文章转载自PawSQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论