概述
优化场景:LIMIT + ORDER BY
在PawSQL的最新版本中,新增了一种可以将OR重写为UNION ALL的场景:当查询中存在LIMIT和ORDER BY子句时,可以使用UNION ALL代替UNION。这一优化特别适用于需要排序并限制返回行数的查询。
示例SQL
考虑以下SQL查询:
select
l_orderkey,
l_extendedprice,
l_discount
from
lineitem
where
L_PARTKEY = 100
or L_SUPPKEY = 100
order by
l_extendedprice desc
复制
在PawSQL 2025.03.11版本之前,PawSQL会将其重写为:
select
PawDT_1742549815973.l_orderkey,
PawDT_1742549815973.l_extendedprice,
PawDT_1742549815973.l_discount
from
(
(select /*QB_1*/
l_orderkey,
l_extendedprice,
l_discount,
l_linenumber
from
lineitem
where
L_SUPPKEY = 100
order by
l_extendedprice desc
limit 10)
union
(select /*QB_2*/
l_orderkey,
l_extendedprice,
l_discount,
l_linenumber
from
lineitem
where
L_PARTKEY = 100
order by
l_extendedprice desc
limit 10)
) as PawDT_1742549815973
order by
PawDT_1742549815973.l_extendedprice desc
limit 10
复制
在这个版本中,执行计划显示在UNION操作时需要进行去重操作(Union materialize with deduplication
),这会增加额外的计算开销。

在最新的PawSQL版本中,查询被重写为:
select
PawDT_1742549815973.l_orderkey,
PawDT_1742549815973.l_extendedprice,
PawDT_1742549815973.l_discount
from
(
(select /*QB_1*/
l_orderkey,
l_extendedprice,
l_discount,
l_linenumber
from
lineitem
where
L_SUPPKEY = 100
order by
l_extendedprice desc
limit 10)
union all
(select /*QB_2*/
l_orderkey,
l_extendedprice,
l_discount,
l_linenumber
from
lineitem
where
L_PARTKEY = 100
order by
l_extendedprice desc
limit 10)
) as PawDT_1742549815973
order by
PawDT_1742549815973.l_extendedprice desc
limit 10
复制
在这个版本中PawSQL使用UNION ALL代替了UNION,执行计划显示UNION操作不再需要去重(Union materialize
),从而减少了不必要的计算,进一步提升了查询性能,执行时间从6.187ms进一步降低到0.464ms,性能进一步提升了10倍!
PawSQL在特定场景下(如条件互斥或是存在LIMIT和ORDER BY子句时),通过将OR条件重写为UNION ALL,能够显著提升SQL查询的性能。

文章转载自PawSQL,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
Oracle SQL 执行计划分析与优化指南
Digital Observer
479次阅读
2025-04-01 11:08:44
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
397次阅读
2025-04-17 17:02:24
火焰图--分析复杂SQL执行计划的利器
听见风的声音
346次阅读
2025-04-17 09:30:30
云和恩墨钟浪峰:安全生产系列之SQL优化安全操作
墨天轮编辑部
246次阅读
2025-03-31 11:08:20
Before & After:SQL整容级优化
薛晓刚
112次阅读
2025-04-14 22:08:44
SQL 优化之 OR 子句改写
xiongcc
100次阅读
2025-04-21 00:08:06
Mysql/Oracle/Postgresql快速批量生成百万级测试数据sql
hongg
78次阅读
2025-04-07 15:32:54
特大新闻, Oracle强劲对手宣布开源!
非法加冯
65次阅读
2025-04-01 12:26:47
Oracle DBA 必备!这份高效运维的“秘籍”,高频实用 SQL 一网打尽
青年数据库学习互助会
64次阅读
2025-03-31 10:03:00
Oracle数据库常用脚本(七)
lh11811
59次阅读
2025-04-01 08:57:44