Ответ
Индексы ускоряют поиск данных, но замедляют вставку и обновление. Основные типы:
1. По структуре и алгоритму:
- B-дерево (B-tree) — стандартный, сбалансированный индекс. Поддерживает быстрое равенство и диапазонные запросы (
=,>,<,BETWEEN,LIKE 'prefix%').CREATE INDEX idx_user_email ON users(email); - Хеш-индекс (Hash) — работает только для операций равенства (
=). Быстрее B-дерева для точного совпадения, но не поддерживает сортировку и диапазоны.CREATE INDEX idx_user_id ON users USING HASH(id); -- Синтаксис PostgreSQL - Bitmap-индекс — эффективен для колонок с низкой кардинальностью (мало уникальных значений, например,
пол,статус).
2. По охвату данных:
- Кластерный индекс (Clustered) — определяет физический порядок хранения строк в таблице. В одной таблице может быть только один кластерный индекс (часто — первичный ключ).
- Некластерный индекс (Non-clustered) — создает отдельную структуру, которая указывает на данные. В таблице может быть много таких индексов.
3. По составу:
- Составной индекс (Composite) — создается по нескольким столбцам. Порядок столбцов критически важен для производительности.
CREATE INDEX idx_last_first ON employees(last_name, first_name); -- Этот индекс поможет для запросов с условием по last_name или по (last_name, first_name). - Покрывающий индекс (Covering) — индекс, который содержит все поля, запрашиваемые в
SELECT. Это позволяет выполнить запрос, обращаясь только к индексу, без чтения таблицы ("index-only scan").
4. Специализированные (PostgreSQL пример):
- GIN (Generalized Inverted Index) — для составных значений: полнотекстовый поиск, JSONB, массивы.
- GiST (Generalized Search Tree) — для геоданных, полнотекстового поиска, деревьев.
Выбор индекса: Зависит от шаблонов запросов (WHERE, JOIN, ORDER BY). Сначала анализируйте медленные запросы с помощью EXPLAIN.