Kel*_*sey 7 sql sql-server optimization join sql-server-2005
我有一个基本的查询,从6秒到1秒只需将一个连接更改LEFT JOIN
为LEFT HASH JOIN
"LEFT LOOP JOIN".任何人都可以解释为什么这会导致性能如此大幅度增加以及为什么SQL的优化器不能自己解决它?
这大致是SQL的样子:
SELECT
a.[ID]
FROM
[TableA] a
LEFT HASH JOIN
[TableB] b
ON b.[ID] = a.[TableB_ID]
JOIN
[TableC] c
ON c.[ID] = a.[TableC_ID]
WHERE
a.[SomeDate] IS NULL AND
a.[SomeStatus] IN ('X', 'Y', 'Z') AND
c.[SomethingElse] = 'ABC'
Run Code Online (Sandbox Code Playgroud)
表A和B在所有ID字段上都有数百万条记录和索引.使用SQL Server 2005.
编辑:一位同事提出了LEFT LOOP JOIN,它似乎让它更快...... SQL不是我的优势之一,所以我试图理解这些"暗示"是如何帮助的.
HASH JOIN
当大部分行对结果集有贡献时很有用.
在你的情况下,建立一个HASH TABLE
在任A
或B
扫描其它表比便宜要么执行NESTED LOOPS
超过指数B.ID
或合并,其优化的提示之前使用的排序结果集.
SQL Server
优化器没有看到:可能是因为你没有收集统计数据,可能是因为你的数据分布有偏差.
更新:
由于您提到LOOP JOIN
提高了速度,因此优化程序可能JOIN
错误地选择了订单.
归档时间: |
|
查看次数: |
7971 次 |
最近记录: |