如何创建索引以优化 "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。因此,它没有利用新创建的索引。
我有一个 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。因此,它没有利用新创建的索引。