2017-12-12 9 views
1

私は索引で選択しているすべての列を追加したにもかかわらず、なぜこのキー照会に照会するのか理解しようとしていますか?これはなぜキールックアップを照会するのですか?

ここでは、クエリ

SELECT TOP 1 
    ART.Id, 
    ART.Title, 
    ART.InitialTitle, 
    ART.Summary, 
    ART.IsCategoryFirst, 
    ART.RootCategoryId, 
    CAT.Name, 
    ART.OldFacebookCommentsUrl, 
    ICO.CssClass, 
    ART.TopicName, 
    ART.MainArticlePhoto, 
    ART.FrontPagePhoto, 
    ART.PublishDate 
FROM Articles ART WITH (NOLOCK) 
INNER JOIN Categories CAT WITH (NOLOCK) ON CAT.Id = ART.RootCategoryId 
LEFT JOIN ArticleIcons ICO WITH (NOLOCK) ON ICO.Id = ART.IconId 
WHERE ART.RootCategoryId = 3 
    AND ART.PublishDate < GETDATE() 
    AND ART.Active = 1 
    AND IsCategoryFirst = 1 

ここでは、これはそれのための実行計画と情報である

CREATE NONCLUSTERED INDEX [SmallArticleResponse] ON [dbo].[Articles] 
(
    [RootCategoryId] ASC, 
    [Active] ASC, 
    [PublishDate] DESC, 
    [Coefficient] DESC 
) 
INCLUDE ( [Id], 
    [Title], 
    [InitialTitle], 
    [OldFacebookCommentsUrl], 
    [Summary], 
    [IconId], 
    [TopicName], 
    [FrontPagePhoto], 
    [MainArticlePhoto], 
    [FacebookPhoto], 
    [IsCategoryFirst]) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] 
GO 

それをカバーすべき指標であるです。 Execution plan Key lookup info

+2

IsCategoryFirst列がキーに含まれていない可能性が高いためです。逆に、別のインデックスがあるため(1列?)、その代わりにそのインデックスを使用しています。 –

+0

となります。愚かな私 – Robert

+0

少しのofftopic:あなたは 'with(nolock)'節について興味深い記事を見つけるかもしれません - https://blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere/ – pkuderov

答えて

1

IsCategoryFirst列がキーに含まれていない可能性が高いためです。そして/またはIsCategoryFirstに別の(単一の列?)インデックスがあり、代わりにそれを使用しているからです。

+0

order by節のために、明らかに異なるインデックスを使用しています。これを解決する方法はありますか? – Robert

+0

投稿されたクエリにorder by節はありません –

+0

残念ながら、後で別のクエリをデバッグしていました。 – Robert

関連する問題