我正在使用 SQL 服务器,并且我一直在仔细研究关键查找的概念,
因此,如果您有一个键查找,您可以创建一个带有“包含”列的索引,以覆盖您在 select 语句中的非索引列。
例如,
SELECT ID, FirstName FROM OneIndex WHERE City = 'Las Vegas'
GO
Run Code Online (Sandbox Code Playgroud)
该索引将包括一个键查找,
CREATE NONCLUSTERED INDEX [IX_OneIndex_City] ON [dbo].[OneIndex]
(
[City] ASC
) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
但是这个将删除密钥查找,
CREATE NONCLUSTERED INDEX [IX_OneIndex_Include] ON [dbo].[OneIndex]
(
City
) INCLUDE (FirstName,ID) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)
我的意思是这对性能有多大影响?键查找的运算符成本为 0.295969 (99%),但这究竟意味着什么?
你怎么知道你在那里需要第二个索引,什么时候会变成你试图添加太多索引而不值得的情况?
在我看来,有些查询可以包括索引扫描、键查找,而且似乎仍然执行得非常快。