如何创建索引以优化 "Key Lookup"

How to create index to optimize a "Key Lookup"

我有一个 SP,首先 运行,可以 运行 一分钟以上。第二个 运行,用时不到一秒。

为了解决这个问题,我检查了显示如下的执行计划:

所以我添加了以下索引,据我所知应该创建一个索引,这样它就不会使用键查找:

CREATE NONCLUSTERED INDEX [ix_account_id_include_utility_id] 
ON dbo.account (account_id)
 include ( utility_id)

我创建索引用了 1 分 50 秒。

然后我再次检查执行计划。但是它和Key Lookup的方案一模一样

我这里的索引有问题吗?

我是索引和优化方面的新手,所以任何建议都将不胜感激。

Keylookup 表示索引中没有特定字段,我们必须去数据页中提取该字段。

在您的情况下,accountid 用于从 Account table.

的数据页中提取 utility_id

您需要做的是,将此 utility_id 添加为最右侧两个索引(在右侧框中突出显示)的包含列的一部分,以避免键查找。

但是,在您的情况下,您再次将索引添加到 account table。因此,它没有利用新创建的索引。