Почему SSMS отображает сообщение «Отсутствует индекс» в многораздельном столбце? - PullRequest
1 голос
/ 13 февраля 2012

У меня есть таблица, разделенная на столбец X.Однако SSMS отображает Отсутствующий индекс (влияние 80.23): Создать некластеризованный индекс [] для [dbo]. [Таблица] ([X]) для следующего запроса

select count(*) from table where X = 'xxx'

Является ли этовсе еще необходимо создать индекс для многораздельного столбца X?И это будет низкая плотность на большом столе.

Редактировать:
Я пытался select max(x) from table.Это занимает гораздо больше времени, чем запуск аналогичного SQL в однораздельной таблице с индексом X.После включения show statistics IO on он показывает, что запрос к многораздельной таблице (без индекса на X) имеет гораздо больше счетчиков сканирования (170) и логических чтений (600K), чемоднораздельная таблица с индексом (количество проверок: 1, логическое чтение: 4).

1 Ответ

1 голос
/ 13 февраля 2012

Это функция SSMS , которая рекомендует индексы, которые будут полезны для запроса. Остерегайтесь ограничений, задокументированных здесь . Вот некоторая документация по индексам и разделам .

SQL Server использует удаление разделов для ускорения запросов к разделенным объектам, получая доступ только к разделам, содержащим данные, необходимые для результатов. Чтобы исключить разделы, SQL Server должен знать, сколько разделов должно быть доступно. В SQL Server 2005 это перечисление выполняется с использованием соединений вложенных циклов и сканирует / ищет в каждом разделе. В SQL Server 2008 план выполнения для доступа к многораздельной таблице будет в значительной степени соответствовать плану однораздельной таблицы.

В моем тестировании план выполнения SQL Server 2005 показал преимущество наличия индекса (кластеризованного или некластеризованного) для многораздельного столбца. План выполнения SQL Server 2008 был изменен, чтобы показать поиск кластеризованного индекса, но стоимость была той же, независимо от того, был ли индексированный столбец проиндексирован или нет. Тем не менее, в этой статье partitioning seeks обсуждается skip scan , которая ускоряет (и снижает стоимость) извлечение данных, когда секционированный столбец и столбец, указанные в предложении where, совпадают.

Подробнее в этих статьях: Разделение SQL Server 2005 , Разделение SQL Server 2008 и Разделение SQL Server 2008 ищет .

...