我在使用联合时遇到性能问题。我有两个具有相同列结果但来自不同表的 sql 查询:
SELECT COL1, COL2, COL3
FROM TABLE1
(大约需要 4 秒才能完成)和:
SELECT COL1, COL2, COL3
FROM TABLE2 INNER JOIN TABLE3 ON ID
这也需要大约 4 秒才能完成。当我使用UNION ALL
这两个查询时,结果需要 22 秒才能完成。
有什么提高性能的建议吗?
我在使用联合时遇到性能问题。我有两个具有相同列结果但来自不同表的 sql 查询:
SELECT COL1, COL2, COL3
FROM TABLE1
(大约需要 4 秒才能完成)和:
SELECT COL1, COL2, COL3
FROM TABLE2 INNER JOIN TABLE3 ON ID
这也需要大约 4 秒才能完成。当我使用UNION ALL
这两个查询时,结果需要 22 秒才能完成。
有什么提高性能的建议吗?
UNION 子句通过在 select 子句上使用 DISTINCT 并创建一些临时表来删除重复项,这些都是性能昂贵的任务。您是否需要这些重复项?
查看Pinal Dave 的此链接,它详细分析了使用 UNION 和 UNION ALL,以及执行计划分析。
如果没有表结构的详细视图,我也会检查这些选择子句是否正确使用了索引。
尝试使用UNION ALL
- 它避免找到重复项。最好不要在UNION
没有ALL
and的情况下使用DISTINCT
,除非你真的需要它。
与性能问题一样:衡量。
所以下一步是从你的数据库中获取执行计划并查看它。如果您不了解该计划,请提出一个新问题。