SQL联合开销

时间:2012-05-23 08:00:51

标签: sql sql-server performance union

我在使用union时遇到了性能问题。 我有两个sql查询具有相同的列结果但来自不同的表:

SELECT COL1, COL2, COL3
FROM TABLE1

(完成需要大约4秒)和:

SELECT COL1, COL2, COL3
FROM TABLE2 INNER JOIN TABLE3 ON ID

也需要大约4秒才能完成。当我使用UNION ALL进行两次查询时,结果需要22秒才能完成。

有任何提高绩效的建议吗?

3 个答案:

答案 0 :(得分:2)

UNION子句通过在select子句上使用DISTINCT并创建一些临时表来删除重复项,这些是性能昂贵的任务。你需要那些重复的吗?

检查this link by Pinal Dave它有关于使用UNION和UNION ALL的详细分析,以及执行计划分析。

我也会检查是否在这些select子句中正确使用了索引,而没有详细的表结构视图很难说。

答案 1 :(得分:0)

尝试使用UNION ALL - 它可以避免查找重复项。最好不要在没有UNIONALL的情况下使用DISTINCT,除非您真的需要它。

答案 2 :(得分:0)

与性能问题一样:测量。

所以下一步是从数据库中获取执行计划并查看它。如果您不了解该计划,请打开一个新问题。