Где я должен поставить индекс? - PullRequest
1 голос
/ 13 августа 2011

Это псевдокод:

Select 
    count(score) 
from 
   myTable
join 
   HisTable on myTAble.id = HisTable.id 
where 
   name='aaa'
group by 
   id 
having 
   count(score) > 3 
order by 
   (someField)

Мой вопрос об индексе. Где я должен поместить некластеризованный индекс и кластерный индекс? По какому приоритету? (совокупность? порядок? где? поля объединения?)

1 Ответ

3 голосов
/ 13 августа 2011

В SQL Server есть несколько основных соображений:

  • ключ кластеризации жизненно важен, и его следует выбирать осторожно - он должен быть узким, уникальный, статичный и, возможно, постоянно увеличивающийся (принцип NUSE ) - см. постоянно расширяющийся ключ кластеризации Кима Триппа - Дебаты по кластерному индексу .......... снова! сообщение в блоге для получения более подробной информации о том, почему эти характеристики важны).

    Таким образом, ваш ключ кластеризации должен быть узким - 4-байтовый INT идеален, он должен быть UNIQUE и статическим, и это прекрасно обрабатывается каким-то ID - особенно еслиэто INT IDENTITY.GUID значительно хуже, поля VARCHAR переменной ширины абсолютно исключены

  • каждый столбец внешнего ключа в дочерней таблице, ссылающейся на родительскую таблицу, должен быть частьюнекластеризованный индекс.Это значительно ускоряет СОЕДИНЕНИЯ и другие операции

  • любой столбец, используемый в предложении WHERE или ORDER BY, также является хорошим кандидатом для индексации.

Но учтите: индексирование - это искусство и балансирование.Каждый дополнительный индекс добавляет больше накладных расходов - не переусердствуйте ваши индексы!Меньше часто больше.Попробуйте

  • выбрать хорошо ключ кластеризации
  • поместить некластеризованные индексы в каждый из ваших столбцов внешнего ключа

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

Читайте сообщения Кима Триппа в блоге - и все, если у вас есть время.Она Королева индексации и предлагает тонны очень ценных идей о том, что делать (а что не делать).

...