2017-12-12 3 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 열이 키에 없으므로 가능성이 큽니다. 또는 반대로 별도의 인덱스가 있기 때문에 (단일 열?) 대신 그 인덱스를 사용합니다. –

+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

관련 문제