
查询折叠指的高级是把查询中的视图、CTE或是查询DT子查询展开,并与引用它的折叠查询语句合并,从而减少查询语句的高级子查询数目,降低其复杂度的查询一种优化算法。其收益有以下三个方面:
避免中间结果集的折叠物化。启用更多的高级连接顺序规划。提供更多的查询索引建议机会(PawSQL索引推荐引擎)。考虑下面的折叠例子:
复制SELECT * FROM (SELECT c_custkey, c_name FROM customer) AS dt;1.重写后的SQL为:
复制SELECT c_custkey, c_name FROM customer1.注1. 在下文中,我们将使用“视图”一词,但所有描述也适用于CTE或是DT子查询。
注2. 本文所使用的高级执行计划可视化工具为 PawSQL Explain Visualizer , 支持MySQL、PostgreSQL、查询openGauss等数据库。折叠
PawSQL优化引擎针对不同的SQL语法结构,支持两种查询折叠的查询优化策略。
将视图拆分并合并到外部查询块中。
案例原始查询 复制select c.c_name, sum(o_totalprice) price from customer c, (select o_custkey, o_totalprice from orders where o_shippriority=0)dt where c.c_custkey = dt.o_custkey group by c.c_name1.2.3.4. 原执行计划

我们可以看到,原查询的执行计划中有一个物化步骤,通过SQL重写后,消除了此物化步骤。
将外部查询合并至视图,并删除外部查询。
案例原始查询 复制select dt.price from (select c.c_name, sum(o_totalprice) price from customer c, orders where c.c_custkey = orders.o_custkey group by c.c_name) dt where dt.c_name like 139%;1.2.3.4.5.6. 原执行计划

与类型1类似,我们可以看到重写优化后消除了物化步骤,同时性能提升了231.83%。
注3. 其中对于第一种类型,MySQL 5.7以及PostgreSQL 14.0以上的版本都在优化器内部进行了支持;而第二类查询折叠的优化,在最新的MySQL及PostgreSQL版本中都没有支持。云服务器提供商



PawSQL专注数据库性能优化的自动化和智能化,支持MySQL,PostgreSQL,Opengauss等,提供的SQL优化产品包括
PawSQL Cloud,在线自动化SQL优化工具,支持SQL审查,智能查询重写、基于代价的索引推荐,适用于数据库管理员及数据应用开发人员。PawSQL Advisor,IntelliJ 插件, 适用于数据应用开发人员,可以IDEA/DataGrip应用市场通过名称搜索“PawSQL Advisor”安装。免费源码下载PawSQL Engine, 是PawSQL系列产品的后端优化引擎,可以以docker镜像的方式独立安装部署,并通过http/json的接口提供SQL优化服务。(责任编辑:系统运维)