Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
бд / Лекция 6 - Представления, индексы.docx
Скачиваний:
29
Добавлен:
14.05.2015
Размер:
396.6 Кб
Скачать

Кластерный индекс

Понятие “кластерный” имеет много значений, но общая идея этого понятия – рассмотрение двух физических объектов как единую сущность. Например, в области построения сетей, кластер есть группа двух и более серверов, видимых как единая логическая сущность и используется для отказоустойчивости и выравнивания (балансировки) нагрузки. В SQL Server кластер означает индекс, смешанный с данными. Таблица представляет собой часть индекса.

Рис.3 Кластерный индекс

Фактически, для кластерного индекса leaf level этого индекса есть сами страницы таблицы с данными. Рис.3 показывает кластерный индекс, созданный по полю CustomerID таблицы Customers.

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

Некластерный индекс

Некластерный индекс имеет leaf level, который содержит все ключевые значения, отсортированные в том виде как был определен индекс, вместе с row ID или кластерным ключом. Сами данные не хранятся в индексе и вынимаются из таблицы, используя row ID или ключ кластерного индекса. Рис.4 иллюстрирует некластерный индекс по полю City. Как видно в указанном примере, таблица не имеет кластерного индекса потому что ссылкой на запись является row ID.

Рис.4 Некластерный индекс

Кластерный индекс использует row locator и он является частью не кластерного индекса на leaf level. Этот факт приводит к важному правилу SQL Server: создавайте кластерные ключи как можно более короткими. Каждый некластерный индекс будет использовать значения кластерного индекса. Следовательно увеличение размера кластерного индекса приводит к многократному увеличению требований по памяти для всех не кластерных индексов. Последнее приводит к увеличению времени на процессы чтения, сканирования данных и, как следствие, к снижению общей производительности системы. Еще одно наблюдение – увеличение длины ключа приводит к снижению количества записей индекса, способных уместиться в пределах одной страницы, как следствие – к увеличению операций чтения-записи. Рис.5 показывает как строится некластерный индекс поверх кластерного.

Рис 5 Некластерный индекс поверх кластерного

Уникальные индексы

Уникальный индекс гарантирует что каждое значение является уникальным в индексируемом поле или в случае с составным индексом – любая группа значений по полям составного индекса является уникальной. После создания уникального индекса, при попытке вставить повторяющееся значение, вы получите сообщение об ошибке 2601: Cannot insert duplicate key row in object tablename with index indexname.

Доступ к записям при наличии или отсутствии индексов

В зависимости от наличия/отсутствия индексов и их типов, SQL Server может выбрать различные способы доступа к данным таблицы:

  • Сканирование таблицы. Когда индексы не используются и таблица не имеет кластерного индекса. Таблица храниться как куча (heap)

  • Выборка данных по кластерному индексу

  • Выборка данных по не кластерному индексу

В утилите MS SQL Server Management Studio на панели инструментов имеется кнопка включения реального плана выполнения запроса. При включении в нижней части экрана после выполнения запроса появляется вкладка План выполнения. Читается информация о выполнении запроса сверху вниз справа налево.