По материалам статьи Barrie Sosinsky: Build
the right index
Индексы - это главный инструмент повышения
производительности любой базы данных, но важно создать
правильные индексы, иначе, вместо ускорения ваших операций,
неправильный индекс может существенно замедлить исполнение
Ваших запросов. В большинстве случаев, правильность индекса
определяют две характеристики: архитектура базы данных и
бизнес правила или логика использования вашей базы
данных. Вы можете использовать SQL Server Profiler для
фиксации всех типовых запросов, которые могут использоваться,
и затем запустить Index Tuning Wizard, который предложит
наборы полей таблиц для использования в индексах. Однако, из
соображений здравого смысла, Вы можете применять предлагаемые
этим визардом кластерные или не кластерные индексы, пользуясь
следующими ниже простыми правилами:
- Практически все таблицы должны иметь первичный ключ,
который строится на индексе, особенно если этот ключ часто
используется.
- Маленькие таблицы (меньше 100 строк) не нуждаются в
индексах. Процесс индексации маленькой таблицы достаточно
быстр, так что Вы получаете достаточно высокую
производительность не сохраняя такой индекс.
- Стоит индексировать поля, которые часто используется в
запросах, и не стоит индексировать столбцы, которые
используются редко.
- Любое поле, используемое в агрегирующей функции (сумма,
агрегат и т.д.), которая содержит предложения GROUP BY или
ORDER BY и используется в JOIN, должно рассматриваться как
кандидат на индекс. Дело в том, что движок базы данных для
этих операций использует индексы.
- Хорошая практика не индексировать поля, в которых данные
постоянно изменяются. Индекс требует дополнительного
дискового пространства, будет сильно фрагментирован, а
операции вставки, изменения и переиндексации будут требовать
больших затрат системных ресурсов, чего мы хотим избежать.
- Также, избегите индексирования длинных полей данных.
- Но индексируйте любой столбец, который имеет большое
количество уникальных значений и часто используется в
запросах.
Некоторые ситуации требуют построения индексов. Например,
при создании первичного ключа визард предлагает построить
кластерный индекс. Когда Вы используете UNIQUE, SQL Server
предписывает использование индекса для поддержания этой
функции. Вы должны строить не кластерные индексы для внешних
ключей и для полей - значений агрегирующих функций,
используемых в предложении WHERE полей или когда в результате
построенного на этом поле запроса возвращается мало строк.
[В начало]
|