Индексы в РСУБД, виды индексов.
Индекс — специальная структура данных, предназначенная для ускорения поиска и сортировки данных в таблицах. Создается по одному или нескольким столбцам таблицы и хранит:
- значение индексируемых полей
- указатели на соответствующие строки таблицы
Аналогия: индекс в книге позволяет быстро найти нужную страницу, не просматривая всю книгу
Назначение индексов:
- ускорение SELECT, JOIN
- быстрое выполнение WHERE, ORDER BY, GROUP BY
- обеспечение уникальности
Недостатки:
- замедление INSERT, UPDATE, DELETE
- дополнительная память
- нуждаются в обслуживании (перестроение, обновление)
⸻
Классификация индексов
По уникальности
- Уникальный индекс — запрещает дублирование значений, автоматически создаётся для PK.
- Неуникальный индекс — допускает повторяющиеся значения, используется только для ускорения поиска.
⸻
По количеству столбцов
Кластеризованный индекс
- определяет физический порядок хранения строк в таблице
- данные таблицы хранятся отсортированными по ключу индекса
- один на таблицу
- обычно создаётся для PRIMARY KEY
Некластеризованный индекс
- хранит:
- ключ индекса
- указатель на строку (или на кластеризованный индекс)
- не влияет на физический порядок строк
- может быть несколько на одну таблицу
⸻
По способу хранения
- Однопольный индекс — создается по одному столбцу
- Составной (многопольный) индекс — создается по нескольким столбцам
Порядок столбцов имеет значение
⸻
По структуре данных
- B-tree
- самый распространённый тип
- эффективен для диапазонных запросов (<, >, BETWEEN)
- используется по умолчанию во многих СУБД
- Hash
- использует хеш-таблицу
- эффективен для точного поиска (=)
- не подходит для диапазонных запросов и сортировки
- Bitmap
- использует битовые карты
- эффективен, когда мало уникальных значений
- часто используется в аналитических системах
- GiST, GIN, SP-GiST (PostgreSQL)
- применяются для нестандартных данных:
- массивы
- JSON
- полнотекстовый поиск
- геоданные
⸻
Плотный индекс
Таблица индексов имеет структуру (ключ, номер записи в таблице) в отсортированном виде по ключу, при этом она разделена на блоки.
No comments to display
No comments to display