0

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

SELECT COL1, COL2, COL3
FROM TABLE1

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

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

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

有什么提高性能的建议吗?

4

3 回答 3

2

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

查看Pinal Dave 的此链接,它详细分析了使用 UNION 和 UNION ALL,以及执行计划分析。

如果没有表结构的详细视图,我也会检查这些选择子句是否正确使用了索引。

于 2012-05-23T08:11:43.000 回答
0

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

于 2012-05-23T08:03:41.313 回答
0

与性能问题一样:衡量。

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

于 2012-05-23T08:04:30.573 回答