W v*_*Rij 3 performance sql-server query-performance
目前我有一个运行非常缓慢的视图。执行大约需要 3 分钟。这突然发生了。
为了调试发生了什么,我使用了一个旧数据集并比较了两个查询。在旧数据集上,视图会在一秒钟内返回数据。
我注意到一个区别:当前数据集在“嵌套循环”上运行,而我的旧数据集使用哈希匹配运行。
你可以在图片中看到:
我知道你不能像我在其他主题中看到的那样“强制”它使用哈希匹配,但我很难找出为什么它会使用嵌套循环。
这是因为我的数据集中的某些内容不是唯一的吗?
如何修复我当前的数据集以再次开始使用此哈希匹配?
如果您打算这样做,您至少应该改用OPTION ( HASH JOIN )
语法。使用LEFT HASH JOIN
语法隐式地强制执行连接顺序。
这对于散列连接来说是不可取的,因为通常您希望被连接的两个表中较小的一个是构建输入,即执行计划中最顶层的表。使用选项语法允许优化器在运行时决定最佳连接顺序。如需进一步阅读,请参阅这两篇文章:
http://blogs.msdn.com/b/craigfr/archive/2006/08/10/687630.aspx
https://msdn.microsoft.com/en-GB/library/ms173815.aspx
归档时间: |
|
查看次数: |
4824 次 |
最近记录: |