Индексирование в СУБД: Что такое, виды индексов с ПРИМЕРАМИ

⚡ Умное резюме

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

  • 🇧🇷 Основная идея: Индекс — это небольшая таблица из двух столбцов, в которой ключ сопоставляется с указателем на дисковый блок записи.
  • 📇 Первичный индекс: Упорядоченный файл по ключу, разделенный на плотные и разреженные варианты.
  • 🔎 Плотная или редкая растительность: Плотный индекс хранит по одной записи на каждый ключ; разреженный индекс хранит меньшее количество записей для экономии места.
  • 🏷️ Вторичный индекс: Построенная на основе поля, не имеющего упорядоченного представления, она использует сегменты (buckets) для поиска каждой соответствующей записи.
  • 📚 ClusterИндекс: Объединяет строки, имеющие общий неуникальный ключ, в один кластер.
  • ???? Индекс B-деревьев: Сбалансированное многоуровневое дерево, связанные листовые узлы которого поддерживают произвольный и последовательный доступ.
  • ️ Компромисс: Индексирование обеспечивает быстрое чтение, но замедляет вставку, обновление и удаление данных, а также занимает дополнительное место.

Индексирование в базе данных

Что такое индексация?

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

Указатель:

  • Принимает в качестве входных данных поисковый ключ.
  • Эффективно возвращает коллекцию совпадающих записей.

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

Виды индексации в СУБД

Тип индексов в базе данных
Тип индексов в базе данных

Индексирование в базе данных определяется на основе ее индексирующих атрибутов. Существует два основных типа методов индексирования:

  • Первичное индексирование
  • Вторичная индексация

Первичный индекс в СУБД

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

Основной индекс также подразделяется на два типа:

  • Плотный индекс
  • Разреженный индекс

Плотный индекс

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

Плотный индекс в СУБД

Разреженный индекс

Разреженный индекс — это индексная запись, которая отображается только для некоторых значений в файле. Разреженный индекс помогает решить проблемы, возникающие при использовании плотных индексов. СУБДВ этом методе диапазон столбцов индекса хранит один и тот же адрес блока данных, и когда необходимо получить данные, извлекается именно этот адрес блока.

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

Ниже приведён пример разреженного индекса базы данных.

Разреженный индекс в СУБД

Плотный индекс против разреженного индекса

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

Аспект Плотный индекс Разреженный индекс
Записи Один на каждый ключ поиска Один на блок
Space Ещё Less
скорость поиска Быстрее Помедленнее
Обслуживание Высокая Низкая

Вторичный индекс в СУБД

Вторичный индекс в СУБД может быть создан на основе поля, имеющего уникальное значение для каждой записи, и должен быть потенциальным ключом. Он также известен как некластерный индекс.

Этот двухуровневый метод индексирования баз данных используется для уменьшения размера карты.ping размер первого уровня. Для первого уровня выбран большой диапазон чисел, поэтому картаping Размер всегда остаётся небольшим.

Пример вторичного индекса

Давайте разберемся с вторичным индексированием на примере индекса базы данных. В базе данных банковских счетов данные хранятся последовательно по номеру счета (acc_no), но вам может потребоваться найти все счета в конкретном отделении банка ABC.

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

Вторичный индекс в СУБД

ClusterИспользование индекса в СУБД

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

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

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

Что такое многоуровневый индекс?

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

Многоуровневый индекс в СУБД

Индекс B-дерева

B-дерево индекса — наиболее широко используемая структура данных для древовидного индексирования в СУБД. Это многоуровневый формат древовидного индексирования, использующий сбалансированный подход. деревья бинарного поискаВсе листовые узлы B-дерева содержат фактические указатели данных.

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

B-дерево индекса в СУБД

  • Листовые узлы должны иметь от 2 до 4 значений.
  • Длина пути от корня до листа в большинстве случаев одинакова.
  • За исключением корневого узла, не являющиеся листовыми, узлы имеют от 3 до 5 дочерних узлов.
  • Каждый узел, не являющийся корнем или листом, имеет от n/2 до n дочерних узлов.

Там, где преобладают запросы с точным совпадением, а сканирование диапазонов встречается редко, Хеширования может быть более быстрой альтернативой B-дереву индекса.

Преимущества индексации

Важные преимущества индексирования заключаются в следующем:

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

Недостатки индексации

К основным недостаткам индексирования относятся:

  • Для выполнения индексирования необходим первичный ключ в таблице с уникальным значением.
  • Нельзя создать еще один индекс на данных, которые уже организованы таким же образом с помощью индексов.
  • Вам не разрешено секционировать таблицу, организованную по индексу.
  • Индексирование снижает производительность запросов INSERT, DELETE и UPDATE.

Часто задаваемые вопросы (FAQ)

Первичный индекс строится по полю, по которому сортируется файл, обычно по первичному ключу. Вторичный индекс строится по другому полю, поэтому ему требуются сегменты (buckets) для поиска каждой соответствующей записи.

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

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

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

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

Подведем итог этой публикации следующим образом: