我在使用union时遇到了性能问题。 我有两个sql查询具有相同的列结果但来自不同的表:
SELECT COL1, COL2, COL3
FROM TABLE1
(完成需要大约4秒)和:
SELECT COL1, COL2, COL3
FROM TABLE2 INNER JOIN TABLE3 ON ID
也需要大约4秒才能完成。当我使用UNION ALL
进行两次查询时,结果需要22秒才能完成。
有任何提高绩效的建议吗?
答案 0 :(得分:2)
UNION子句通过在select子句上使用DISTINCT并创建一些临时表来删除重复项,这些是性能昂贵的任务。你需要那些重复的吗?
检查this link by Pinal Dave它有关于使用UNION和UNION ALL的详细分析,以及执行计划分析。
我也会检查是否在这些select子句中正确使用了索引,而没有详细的表结构视图很难说。
答案 1 :(得分:0)
尝试使用UNION ALL
- 它可以避免查找重复项。最好不要在没有UNION
和ALL
的情况下使用DISTINCT
,除非您真的需要它。
答案 2 :(得分:0)
与性能问题一样:测量。
所以下一步是从数据库中获取执行计划并查看它。如果您不了解该计划,请打开一个新问题。