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.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...