Введение в программирование SQL Server. Создание и управление базой данных. Инструменты целостности данных, страница 28

Рассматривайте, как таблица используется, когда выбираете кластерный индекс для каждой таблицы.

Когда вы оптимизируете производительность для вставки данных для часто используемой таблицы, рассмотрите создание кластерного индекса на первичный ключ уникальной колонки. Для увеличения скорости вставки в маленькие группы страниц в конец таблицы. Частый доступ помещает эти страницы в память.

Таблицы, которые часто используются для отчётов, группировки для агрегации или поиска ряда значений могут принести пользу при кластерном индексе на сортируемую колонку.

Сервер SQL использует значение кластерного индекса в качестве идентификатора строки внутри каждого не кластерного индекса. Кластерный индекс может повторяться много раз в структуре вашей таблицы.

Для предотвращения больших кластерных индексов:

*  Ограничьте количество колонок в кластерном индексе;

*  Уменьшите среднее значение символов с помощью использования типа данных varchar вместо char.

*  Используйте максимально маленький тип данных.

Индексирование для поддержки запросов

Производительность запросов зависит от того, как хорошо вы спроектировали индексы. Очень важно писать запросы с аргументами поиска, которые могут получить преимущества индексных колонок. Во многих случаях вы должны переписать запросы для конвертирования не поисковых аргументов в поисковые.

Для ограничения поиска вы должны:

*  Используйте опцию WHERE;

*  Убедитесь, что WHERE ограничивает количество строк;

*  Убедитесь, что выражение существует для каждой таблицы используемой в запросе;

*  Старайтесь не использовать в начале групповой символ (? _ * %)

Определение плотности

Когда вы определяете, какую колонку индексировать, вы должны рассмотреть плотность данных.

Плотность – средний процент повторяющихся строк в индексе. Если ваши данные или запрос выбирает не много данных, вы имеете высокую степень плотности.

*  Индекс с большим количеством дубликатов имеет высокую плотность;

*  Уникальный индекс имеет малую плотность.

Когда вы определяете плотность ваших данных, помните, что плотность связана с определёнными элементами данных. Плотность может изменяться.

Так как данные распределяются не равномерно, оптимизатор запросов может использовать или не использовать индексы. Оптимизатор может:

*  Выполнить сканирование таблицы для поля с большой плотностью или для поля, значение которого может вызвать возврат большого количества строк.

*  Если в проиндексированном поле с именами много имен «Вася», то по этому имени может быть использовано сканирование. При этом, для редкого значения, например имени «Аврора», будет использоваться индекс.

Определение разброса данных

Разброс данных связан с плотностью. Когда вы определяете плотность данных, вы должны также рассматривать и разброс.

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

6.6 Рекомендуемая практика

*  Создавайте индексы на колонки, которые используются для объединения, включая первичный и вторичный ключ.

*  Создавайте уникальные индексы для увеличения производительности в уникальных колонках.

*  Следите за индексами и удаляйте те, которые не используются.

*  Где возможно, используйте маленькие типы данных.

*  Рассматривайте использование кластерного индекса для сортировки.

*  Колонки, по которым выбирается много данных, являются хорошим кандидатом на индексы.

6.7 Лабораторная

Просмотр содержимого таблицы sysindex

Используйте следующий скрипт для просмотра содержимого системной таблицы 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 имя таблицы для просмотра информации об индексах таблицы.