SQL 服务器:没有聚集索引的键查找

SQL Server: Key Lookup without Clustered Index

我有一个名为 Scan 的 table,它只有两列:id (int)a (char)

它开始时没有任何索引。所以我在

之后创建了一个非聚集索引 link
CREATE INDEX ix_id ON scan(id ASC)

所以我运行这个select:

SELECT id, a
FROM Scan
WHERE id = 1

这是执行计划:

如果我的 table 没有任何聚集索引,为什么我会得到一个键查找(聚集)?

非聚集索引的叶节点只包含键列,所以除了键列之外的任何内容都被选中(在你的情况下它是a),然后它需要执行Rid/key查找从 heap/clustered index

中提取数据

使用覆盖索引避免键查找

CREATE INDEX ix_id ON scan(id ASC) include (a)

通过这种方式,列 a 也将与键列一起存储在您的索引中,因此将避免键查找

Why did I get a Key Lookup (clustered) if my table doesn't have any clustered index?

你没有。这大概是 SQL Operations Studio 使用的 html-query-plan 库中的错误。

Paste The Plan 网站 (example) 上也出现了同样的问题。

如您所知(因为您找到了!)错误报告 is here