SQL Server查询性能 – 消除哈希匹配需求(内部加入)
发布时间:2020-12-12 06:56:36 所属栏目:MsSql教程 来源:网络整理
导读:我有以下查询,这是非常少的,并且是整个系统中正在进行的连接的一个例子。 select t1.PrimaryKeyId,t1.AdditionalColumnIdfrom TableOne t1 join TableTwo t2 on t1.ForeignKeyId = t2.PrimaryKeyId join TableThree t3 on t1.PrimaryKeyId = t3.ForeignKeyI
我有以下查询,这是非常少的,并且是整个系统中正在进行的连接的一个例子。
select t1.PrimaryKeyId,t1.AdditionalColumnId from TableOne t1 join TableTwo t2 on t1.ForeignKeyId = t2.PrimaryKeyId join TableThree t3 on t1.PrimaryKeyId = t3.ForeignKeyId join TableFour t4 on t3.ForeignKeyId = t4.PrimaryKeyId join TableFive t5 on t4.ForeignKeyId = t5.PrimaryKeyId where t1.StatusId = 1 and t5.TypeId = 68 所有连接列都有索引,但性能并不好。检查查询计划显示了很多哈希匹配(Inner Joins),当我真的想看到嵌套循环连接。 每张表中的记录数如下: select count(*) from TableOne = 64393 select count(*) from TableTwo = 87245 select count(*) from TableThree = 97141 select count(*) from TableFour = 116480 select count(*) from TableFive = 62 什么是提高这种查询性能的最佳方式? 解决方法第一想法:>更改为EXISTS(更改等于连接到半连接) 我不会担心你的加入方式… 就个人而言,我从来没有使用JOIN提示。它们只适用于您在该时间点的数据,索引和统计信息。随着这些变化,您的JOIN提示限制了优化器 select t1.PrimaryKeyId,t1.AdditionalColumnId from TableOne t1 where t1.Status = 1 AND EXISTS (SELECT * FROM TableThree t3 join TableFour t4 on t3.ForeignKeyId = t4.PrimaryKeyId join TableFive t5 on t4.ForeignKeyId = t5.PrimaryKeyId WHERE t1.PrimaryKeyId = t3.ForeignKeyId AND t5.TypeId = 68) AND EXISTS (SELECT * FROM TableTwo t2 WHERE t1.ForeignKeyId = t2.PrimaryKeyId) 一个表的索引 >(Status,ForeignKeyId)INCLUDE(AdditionalColumnId) tableFive的索引大概(typeID,PrimaryKeyId) 编辑:更新JOINS和EXISTS以匹配问题修复 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
热点阅读