Рассматривайте, как таблица используется, когда выбираете кластерный индекс для каждой таблицы.
Когда вы оптимизируете производительность для вставки данных для часто используемой таблицы, рассмотрите создание кластерного индекса на первичный ключ уникальной колонки. Для увеличения скорости вставки в маленькие группы страниц в конец таблицы. Частый доступ помещает эти страницы в память.
Таблицы, которые часто используются для отчётов, группировки для агрегации или поиска ряда значений могут принести пользу при кластерном индексе на сортируемую колонку.
Сервер SQL использует значение кластерного индекса в качестве идентификатора строки внутри каждого не кластерного индекса. Кластерный индекс может повторяться много раз в структуре вашей таблицы.
Для предотвращения больших кластерных индексов:
Ограничьте количество колонок в кластерном индексе;
Уменьшите среднее значение символов с помощью использования типа данных varchar вместо char.
Используйте максимально маленький тип данных.
Производительность запросов зависит от того, как хорошо вы спроектировали индексы. Очень важно писать запросы с аргументами поиска, которые могут получить преимущества индексных колонок. Во многих случаях вы должны переписать запросы для конвертирования не поисковых аргументов в поисковые.
Для ограничения поиска вы должны:
Используйте опцию WHERE;
Убедитесь, что WHERE ограничивает количество строк;
Убедитесь, что выражение существует для каждой таблицы используемой в запросе;
Старайтесь не использовать в начале групповой символ (? _ * %)
Когда вы определяете, какую колонку индексировать, вы должны рассмотреть плотность данных.
Плотность – средний процент повторяющихся строк в индексе. Если ваши данные или запрос выбирает не много данных, вы имеете высокую степень плотности.
Индекс с большим количеством дубликатов имеет высокую плотность;
Уникальный индекс имеет малую плотность.
Когда вы определяете плотность ваших данных, помните, что плотность связана с определёнными элементами данных. Плотность может изменяться.
Так как данные распределяются не равномерно, оптимизатор запросов может использовать или не использовать индексы. Оптимизатор может:
Выполнить сканирование таблицы для поля с большой плотностью или для поля, значение которого может вызвать возврат большого количества строк.
Если в проиндексированном поле с именами много имен «Вася», то по этому имени может быть использовано сканирование. При этом, для редкого значения, например имени «Аврора», будет использоваться индекс.
Разброс данных связан с плотностью. Когда вы определяете плотность данных, вы должны также рассматривать и разброс.
Разброс данных определяет количество данных в определенных рамках значений и как много строк попадает в эти пределы. Если индексированная колонка имеет мало уникальных значений, получение данных может быть медленным. Например, если у вас есть таблица с полем отсортированным по фамилии, то данные могут быть неравномерно разбросаны по алфавиту. На некоторые буквы фамилий больше.
Создавайте индексы на колонки, которые используются для объединения, включая первичный и вторичный ключ.
Создавайте уникальные индексы для увеличения производительности в уникальных колонках.
Следите за индексами и удаляйте те, которые не используются.
Где возможно, используйте маленькие типы данных.
Рассматривайте использование кластерного индекса для сортировки.
Колонки, по которым выбирается много данных, являются хорошим кандидатом на индексы.
Используйте следующий скрипт для просмотра содержимого системной таблицы sysindex:
SELECT t.name AS [Table Name], i.name AS [Index Name], i.*
FROM sysobjects AS t JOIN sysindexes AS i ON t.id = i.id
WHERE t.id > 100
ORDER BY t.name
Используйте встроенную процедуру sp_help имя таблицы для просмотра информации об индексах таблицы.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.