You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL中UNION排序是否利用索引?预排序能否提升性能?

关于UNION ALL与ORDER BY的索引利用及性能问题

问题背景

现有两个独立表top_rated_films与most_popular_films,二者均包含索引字段release_date。

问题1

执行如下SQL语句时,语句中的ORDER BY是否会利用索引?

SELECT * FROM top_rated_films
UNION ALL
SELECT * FROM most_popular_films
ORDER BY release_date;

问题2

若上述语句的ORDER BY无法利用索引,执行如下SQL语句时,通过预排序第一个数据集能否提升查询速度?

SELECT * FROM top_rated_films ORDER BY release_date
UNION ALL
SELECT * FROM most_popular_films
ORDER BY release_date;

回答

问题1结论:不会利用索引

UNION ALL会先合并两个表的结果集生成一个临时集合,之后才对这个临时集合执行ORDER BY排序。由于临时集合不存在release_date索引,排序操作只能遍历全部临时数据完成,无法借助原表的索引。

问题2结论:预排序第一个数据集无法提升查询速度

外层的ORDER BY是对合并后的完整结果集做全局排序,不管第一个子查询是否提前排序,最终都要将两个结果集合并后重新执行整体排序。提前给第一个表排序不仅没有优化效果,反而会多执行一次无意义的排序操作,额外消耗CPU和内存资源。

内容的提问来源于stack exchange,提问作者RobKohr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 00:25:20