Некластерный индекс не работает SQL Server - PullRequest
2 голосов
/ 07 декабря 2010

У меня есть таблица, у которой нет первичного ключа. данные уже есть. Я сделал некластеризованный индекс. но когда я запускаю запрос, фактический план выполнения не показывает сканирование индекса. Я думаю, что не кластерный индекс не работает. Что может быть причиной. Пожалуйста, помогите мне

Ответы [ 2 ]

5 голосов
/ 07 декабря 2010

Прежде всего - почему нет первичного ключа ?? Если у него нет первичного ключа, это не таблица - просто добавьте его! Это поможет на многих уровнях ....

Во-вторых: даже если у вас есть индекс, оптимизатор запросов SQL Server всегда будет смотреть на ваш запрос, чтобы решить, имеет ли смысл использовать индекс (или нет). Если вы выберете все столбцы и большую часть строк, то использование индекса будет бессмысленным.

Итак, чего следует избегать:

  • SELECT * FROM dbo.YourTable почти гарантировано не для использования любых индексов
  • если в вашем запросе нет хорошего предложения WHERE
  • если ваш индекс находится в столбце, который на самом деле не выбирает небольшой процент данных; индекс по логическому столбцу или столбцу Gender, содержащему не более трех разных значений, вообще не помогает

Не зная намного больше о структуре вашей таблицы, данных, содержащихся в этих таблицах, количестве строк и типах запросов, которые вы выполняете, никто не может действительно ответить на ваш вопрос - он слишком широк ... ..

Обновление: , если вы хотите создать кластеризованный индекс для таблицы, которая отличается от вашего первичного ключа, выполните следующие действия:

1) Сначала создайте свой стол 2) Затем откройте дизайнер индексов - создайте новый кластеризованный индекс в столбце по вашему выбору. Имейте в виду - это не первичный ключ !

alt text

3) После этого вы можете поместить свой первичный ключ в столбец ID - он создаст индекс, но этот индекс не кластеризован !

alt text

1 голос
/ 07 декабря 2010

Не имея больше информации, я предполагаю, что причина в том, что таблица слишком мала, чтобы поиск индекса стоил того.

Если в вашей таблице меньше нескольких тысяч строк, то SQL Serverпочти всегда выбирает сканирование таблицы / индекса независимо от индексов в этой таблице просто потому, что сканирование индекса на самом деле происходит быстрее.проблема с производительностью - действительно ли запрос медленный?

...