1

我对此感到非常困惑。我无法提供示例,因为最终的 SQL 语句是动态构建的,并且许多函数和过程在其中发挥作用......

一般来说,我有五个联接。我注意到当我删除其中一个时,语句执行 0 秒,否则超过 4 分钟。然后,我查看了实际的执行计划,并注意到“合并连接”需要很多成本。在 Google 中搜索给我留下了“INNER MERGE JOIN”使用或“OPTION (MERGE JOIN)”和语句的结尾。

这非常好,因为查询现在执行了 0 秒。但我的问题是为什么?

我做了一些研究,发现要使用 MERGE 连接,必须对两个语句进行排序 - 这不是我的情况,它们不是,我仍然在 0 秒内得到正确的结果。

有没有人在 T-SQL 想法方面取得进展,为什么会导致这种情况?

我知道我已经有了解决方案,但我想知道为什么它会起作用以及发生了什么。

4

2 回答 2

3

发生这种情况的一个原因是,如果在慢速计划中,它使用嵌套循环连接,并在内部评估查询的成本很高(由于成本估计不准确而选择了计划)

给出合并连接提示将导致昂贵的查询仅被评估一次(作为您描述中的排序运算符的输入)而不是重复(合并连接会通过其每个输入)。

您需要捕获慢速和快速版本的执行计划,以查看是否属于这种情况。

于 2012-08-10T12:43:30.307 回答
0

查询优化器在制定计划时会考虑连接数。我已经看到了同样的场景,在 5 个连接处它采用了不同的方法。您可以使用表提示来强制执行查询计划。您还可以重新构造查询以使用联合或相交而不是连接。

于 2012-08-10T12:51:31.080 回答