인덱스에서 선택하는 모든 열을 추가 한 경우에도 왜이 쿼리는 키 조회를하는지 이해하려고합니까?왜이 쿼리는 키 조회입니까?
여기 여기에 쿼리를
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
IsCategoryFirst 열이 키에 없으므로 가능성이 큽니다. 또는 반대로 별도의 인덱스가 있기 때문에 (단일 열?) 대신 그 인덱스를 사용합니다. –
그 것이다. 어리석은 나의 – Robert
약간의 offtopic : 당신은'with (nolock)'조항에 대한 흥미로운 글을 발견 할 것이다 - https://blogs.sentryone.com/aaronbertrand/bad-habits-nolock-everywhere/ – pkuderov