小编Mic*_*ael的帖子

消除执行计划中的键查找

我有以下查询:

DECLARE @p__linq__0 UNIQUEIDENTIFIER

SET @p__linq__0 = '... some guid ...'

SELECT TOP 1
    [EventId] AS [EventId],       
    [DateCreated] AS [DateCreated],       
    [LocationId] AS [LocationId],       
    [SourceName] AS [SourceName],       
    [SourceState] AS [SourceState],       
    [Priority] AS [Priority],       
    [EventDescription] AS [EventDescription],       
    [FirstTrigger] AS [FirstTrigger]
FROM [dbo].[Watchdog]
WHERE 
    [LocationId] = @p__linq__0
    AND 
    [FirstTrigger] = 1
ORDER BY [DateCreated] DESC
Run Code Online (Sandbox Code Playgroud)

Watchdog 表定义了 2 个 indecies:

  1. EventId主键列上的聚集索引
  2. DateCreated列上的非聚集索引

这是查询的实际执行计划: 在此处输入图片说明

阅读有关如何消除键查找的其他文章,我添加了另一个非聚集索引,其中包括来自SELECT

CREATE NONCLUSTERED INDEX [LocationId_FirstTrigger] ON [dbo].[Watchdog]
(
    [LocationId] ASC,
    [FirstTrigger] ASC
)
INCLUDE ( …
Run Code Online (Sandbox Code Playgroud)

performance sql-server execution-plan sql-server-2012 query-performance

7
推荐指数
2
解决办法
913
查看次数