Почему Sql Server рекомендует создавать индекс, если он уже существует? - PullRequest
3 голосов
/ 15 марта 2010

Я выполнил очень простой запрос к одной из наших таблиц и заметил, что обработчик запросов плана выполнения рекомендует создать индекс для столбца

Запрос

SELECT SUM(DATALENGTH(Data))
FROM Item
WHERE Namespace = 'http://some_url/some_namespace/'

После запуска я получаю следующее сообщение

// The Query Processor estimates that implementing the following index could improve the query cost by 96.7211%.
CREATE NONCLUSTERED INDEX [<Name of Missing Index, sysname,>]
ON [dbo].[Item] ([Namespace])

Моя проблема в том, что у меня уже есть такой индекс для этого столбца:

CREATE NONCLUSTERED INDEX [IX_ItemNamespace] ON [dbo].[Item] 
(
    [Namespace] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]

Почему Sql Server рекомендует мне создать такой индекс, когда он уже существует?

1 Ответ

0 голосов
/ 15 марта 2010

Столбец индекса и порядок сортировки имеют значение ...

Предыдущий SO 1 и SO 2

Однако для чего-то такого простого попробуйте добавить предложение INCLUDE , чтобы оно охватывало.

CREATE NONCLUSTERED INDEX [IX_ItemNamespace] ON [dbo].[Item] ([Namespace]) INCLUDE ([Data])
...