sql – 为什么’HASH JOIN’或’LOOP JOIN’改进了这个存储过程
发布时间:2020-12-12 07:00:14 所属栏目:MsSql教程 来源:网络整理
导读:只需将一个连接从LEFT JOIN更改为LEFT HASH JOIN或“LEFT LOOP JOIN”,我的基本查询从6秒到1秒.任何人都可以解释为什么这会导致性能如此大幅度增加以及为什么SQL的优化器不能自己解决它? 这大致是SQL的样子: SELECT a.[ID]FROM [TableA] aLEFT HASH JOIN [T
只需将一个连接从LEFT JOIN更改为LEFT HASH JOIN或“LEFT LOOP JOIN”,我的基本查询从6秒到1秒.任何人都可以解释为什么这会导致性能如此大幅度增加以及为什么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' 表A和B在所有ID字段上都有数百万条记录和索引.使用SQL Server 2005. 编辑:一位同事提出了一个LEFT LOOP JOIN,它似乎让它更快…… SQL不是我的优势之一,所以我试图理解这些“暗示”是如何帮助的. 解决方法当大部分行对结果集有贡献时,HASH JOIN非常有用.在您的情况下,在A或B上构建HASH TABLE并扫描另一个表比在B.ID上对索引执行NESTED LOOPS或合并优化程序在提示之前使用的排序结果集要便宜. SQL Server的优化器没有看到:可能是因为您没有收集统计??信息,可能是因为您的数据分布有偏差. 更新: 由于您提到LOOP JOIN提高了速度,因此优化程序可能错误地选择了JOIN顺序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |