t sql union vs join order(效率)

时间:2012-10-30 18:04:25

标签: sql sql-server

我有一个相对简单的问题。

我有数据集A和数据集B,两者结构相同。

最终结果将是所有数据集A和数据集B的联合,我们将其称为数据集C.

但在最终版本之前,需要通过连接数据集X来过滤最终数据集。

问题是我应该在数据集X上加入数据集A,在数据集X上加入数据集B,然后加入联合ALL A和B,或者我应该将所有A和B联合到C中,然后在X上加入C.

什么是更快,更高效的内存等?

提前致谢!

3 个答案:

答案 0 :(得分:5)

这取决于很多东西,从你的问题中无法说:索引,统计,内部或外部联接,数据类型。你必须要了解更多,即便如此,你真的需要比较执行计划。

因为我不想重复自己,我可能会出于维护原因在UNION之外进行加入,但如果我不得不打赌,我可能会认为加入首先可以胜过它 - 特别是如果联合削减大幅减少行数。

答案 1 :(得分:1)

我的直觉就是加入x然后联合结果。这样,sql server optimiser有更好的机会提供最佳的查询计划,但这可能是你同时写两个,检查执行计划和时间以真正看到差异的情况。

答案 2 :(得分:1)

我真的希望看到两者的执行计划,看看什么花费的时间/资源更少。

Here is a great starter video开始在SQL Authority上进行性能调优。一个真正永远不会引起足够重视的话题。

在优化过程中监控执行计划是一项很好的技术,因为它真正落在战壕中,向您展示在执行过程中是否以及如何进一步支持索引和其他调优技术。