Индекс базы данных: типы индексов

Типы индексов

Растровый индекс (bitmap index)

Растровый индекс - это особый вид индексации, который хранит большую часть своих данных в виде битовых массивов (bitmaps) и отвечает на большинство запросов, выполняя побитовые логические операции с этими bitmaps. Наиболее часто используемые индексы, такие как B+ деревья, наиболее эффективны, если значения, которые они индексируют, не повторяются или повторяются небольшое количество раз. Напротив, растровый индекс предназначен для случаев, когда значения переменной повторяются очень часто. Например, поле пола в базе данных клиентов обычно содержит не более трех различных значений: мужское, женское или неизвестное (не записано). Для таких переменных растровый индекс может иметь значительное преимущество в производительности по сравнению с обычно используемыми деревьями.

Плотный индекс (dense index)

Плотный индекс в базах данных - это файл с парами ключей и указателей для каждой записи в файле данных. Каждый ключ в этом файле связан с определенным указателем на запись в файле отсортированных данных. В кластерных индексах с дублирующимися ключами плотный индекс указывает на первую запись с этим ключом.

Разреженный индекс (sparse index)

Разреженный индекс в базах данных - это файл с парами ключей и указателей для каждого блока в файле данных. Каждый ключ в этом файле связан с определенным указателем на блок в файле отсортированных данных. В кластерных индексах с дублирующимися ключами разреженный индекс указывает на самый низкий поисковый ключ в каждом блоке.

Обратный индекс (reverse index)

Индекс обратного ключа меняет значение ключа на обратное (в обратном порядке) перед вводом его в индекс. Например, значение 24538 становится 83542 в индексе. Изменение значения ключа на обратное особенно полезно для индексации данных, таких как порядковые номера, где новые значения ключа монотонно увеличиваются.

Первичный индекс (primary index)

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

Вторичный индекс (secondary index)

Он используется для индексации полей, которые не являются ни полями упорядочения, ни ключевыми полями (нет гарантии, что файл организован по ключевому полю или первичному ключевому полю). Одна запись индекса для каждого кортежа в файле данных (плотный индекс) содержит значение индексированного атрибута и указатель на блок/запись.

Реализации индекса

Индексы могут быть реализованы с использованием различных структур данных. Популярные индексы включают сбалансированные деревья, деревья B+ и хэши.

В Microsoft SQL Server конечный узел кластерного индекса соответствует фактическим данным, а не просто указателю на данные, которые находятся в другом месте, как в случае с некластеризованным индексом. Каждое отношение может иметь один кластерный индекс и множество некластеризованных индексов.

Контроль конкурентности индекса

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

Покрывающий индекс

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

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

Рассмотрим следующую таблицу (другие поля пропущены):

ID  Name    Other Fields
12  Plug    ...
13  Lamp    ...
14  Fuse    ...

Чтобы найти имя для идентификатора 13, полезно использовать индекс (ID), но для получения имени необходимо прочитать запись. Однако индекс (ID, имя) содержит обязательное поле данных и устраняет необходимость поиска записи.

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

Покрывающий индекс может значительно ускорить поиск данных, но сам по себе может быть большим из-за дополнительных ключей, которые замедляют вставку и обновление данных. Чтобы уменьшить такой размер индекса, некоторые системы допускают включение неключевых полей в индекс. Неключевые поля сами по себе не являются частью упорядочения индекса, а включены только на уровне листа, что позволяет создать индекс покрытия с меньшим общим размером индекса.

Стандартизация

Ни один стандарт не определяет, как создавать индексы, потому что стандарт ISO SQL не охватывает физические аспекты. Индексы являются одной из физических частей концепции базы данных среди других, таких как хранилище (табличное пространство или файловые группы). Все поставщики СУБД предоставляют синтаксис CREATE INDEX с некоторыми конкретными параметрами, которые зависят от возможностей их программного обеспечения.


Читайте также:


Комментарии

Популярные сообщения из этого блога

Язык поисковых запросов в Graylog

Нормальные формы, пример нормализации в базе данных

Хэш-таблица: разрешение коллизий