Skip to main content

Индексы в РСУБД, виды индексов.

Индекс — специальная структура данных, предназначенная для ускорения поиска и сортировки данных в таблицах. Создается по одному или нескольким столбцам таблицы и хранит:

  • значение индексируемых полей
  • указатели на соответствующие строки таблицы

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

Назначение индексов:

  • ускорение SELECT, JOIN
  • быстрое выполнение WHERE, ORDER BY, GROUP BY
  • обеспечение уникальности

Недостатки:

  • замедление INSERT, UPDATE, DELETE
  • дополнительная память
  • нуждаются в обслуживании (перестроение, обновление)

Классификация индексов

По уникальности
  • Уникальный индекс — запрещает дублирование значений, автоматически создаётся для PK.
  • Неуникальный индекс — допускает повторяющиеся значения, используется только для ускорения поиска.

По количеству столбцов

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

  • определяет физический порядок хранения строк в таблице
  • данные таблицы хранятся отсортированными по ключу индекса
  • один на таблицу
  • обычно создаётся для PRIMARY KEY

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

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

По способу хранения
  • Однопольный индекс — создается по одному столбцу
  • Составной (многопольный) индекс — создается по нескольким столбцам

Порядок столбцов имеет значение

По структуре данных
  • B-tree
    • самый распространённый тип
    • эффективен для диапазонных запросов (<, >, BETWEEN)
    • используется по умолчанию во многих СУБД
  • Hash
    • использует хеш-таблицу
    • эффективен для точного поиска (=)
    • не подходит для диапазонных запросов и сортировки
  • Bitmap
    • использует битовые карты
    • эффективен, когда мало уникальных значений
    • часто используется в аналитических системах
  • GiST, GIN, SP-GiST (PostgreSQL)
    • применяются для нестандартных данных:
    • массивы
    • JSON
    • полнотекстовый поиск
    • геоданные

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

Таблица индексов имеет структуру (ключ, номер записи в таблице) в отсортированном виде по ключу, при этом она разделена на блоки.