微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

sql-server – 执行计划基础 – 哈希匹配混乱

我开始学习执行计划,并且对哈希匹配的确切工作原理以及为什么在简单连接中使用它感到困惑:
select Posts.Title,Users.displayName
From Posts JOIN Users on
Posts.OwnerUserId = Users.Id
OPTION (MAXDOP 1)

据我所知,Top索引扫描的结果变为哈希能力,并且查找底部索引聚类扫描中的每一行.我理解哈希表至少在某种程度上是如何工作的,但是我很困惑在这样的例子中哪些值正好被哈希处理.

我有意义的是,他们之间的共同领域,id,是哈希 – 但如果是这样的话,为什么要哈希一个数字呢?

解决方法

正如sqlRockstar的回答引用

best for large,unsorted inputs.

现在,

>从Users.displayName索引扫描(假设为非聚集),您获得Users.Id(假设已聚集)=未排序
>您还扫描OwnerUserId =未分类的帖子

这是2个无序输入.

我会在OwnerUserId上的Posts表上考虑一个索引,包括Title.这将在JOIN的输入的一侧添加一些顺序,它将覆盖索引

CREATE INDEX IX_OwnerUserId ON Posts (OwnerUserId) INCLUDE (Title)

然后,您可能会发现不会使用Users.displayName索引,而是会扫描PK.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐