Чем полезны для производительности составные индексы
Python
Middle
Без компании
Чем полезны для производительности составные индексы
Ответы
Составные (композитные) индексы ускоряют запросы, которые фильтруют или сортируют по нескольким полям одновременно. Они эффективны, когда:
- **Запрос использует префикс индекса** – например, индекс `(a, b, c)` ускорит фильтрацию по `a`, `(a, b)` или `(a, b, c)`, но не по `b` или `c` отдельно.
- **Покрывающие индексы** – если индекс содержит все поля запроса, БД может выполнить запрос, не обращаясь к таблице (index-only scan).
Пример для PostgreSQL:
```
-- Создание составного индекса
CREATE INDEX idx_user_name_age ON users (last_name, age);
-- Запрос, использующий префикс индекса (last_name)
SELECT * FROM users WHERE last_name = 'Smith';
-- Покрывающий индекс (данные берутся только из индекса)
SELECT last_name, age FROM users WHERE last_name = 'Smith' AND age > 30;
```
**Нюансы:**
- Порядок столбцов в индексе критичен. Первым должно идти поле с высокой селективностью.
- Избыточные индексы (например, отдельный на `last_name`) могут быть не нужны, если есть составной.
- Обновление индекса замедляет `INSERT/UPDATE/DELETE`.