В SQL Server есть несколько основных соображений:
ключ кластеризации жизненно важен, и его следует выбирать осторожно - он должен быть узким, уникальный, статичный и, возможно, постоянно увеличивающийся (принцип NUSE ) - см. постоянно расширяющийся ключ кластеризации Кима Триппа - Дебаты по кластерному индексу .......... снова! сообщение в блоге для получения более подробной информации о том, почему эти характеристики важны).
Таким образом, ваш ключ кластеризации должен быть узким - 4-байтовый INT идеален, он должен быть UNIQUE и статическим, и это прекрасно обрабатывается каким-то ID
- особенно еслиэто INT IDENTITY
.GUID значительно хуже, поля VARCHAR переменной ширины абсолютно исключены
каждый столбец внешнего ключа в дочерней таблице, ссылающейся на родительскую таблицу, должен быть частьюнекластеризованный индекс.Это значительно ускоряет СОЕДИНЕНИЯ и другие операции
любой столбец, используемый в предложении WHERE
или ORDER BY
, также является хорошим кандидатом для индексации.
Но учтите: индексирование - это искусство и балансирование.Каждый дополнительный индекс добавляет больше накладных расходов - не переусердствуйте ваши индексы!Меньше часто больше.Попробуйте
- выбрать хорошо ключ кластеризации
- поместить некластеризованные индексы в каждый из ваших столбцов внешнего ключа
и затем увидетьесли ваше приложение работает нормально.Если это так - хорошо, пусть будет так.Если нет: попробуйте изолировать оскорбительные запросы и попытаться настроить их.Не переусердствуйте в индексации, настраивая каждый отдельный запрос - индекс, который может принести пользу одному запросу, может серьезно повлиять на другой.Речь идет о поиске наилучшего набора показателей для всего вашего приложения.
Читайте сообщения Кима Триппа в блоге - и все, если у вас есть время.Она Королева индексации и предлагает тонны очень ценных идей о том, что делать (а что не делать).