25. Query Optimization: Indexes
Стратегии создания и использования индексов.
Правило ESR для составных индексов
Заголовок раздела «Правило ESR для составных индексов»Equality → Sort → Range
-- Query:SELECT * FROM ordersWHERE status = 'active' AND created_at > '2024-01-01'ORDER BY created_at DESC;
-- ✅ Правильный порядок:CREATE INDEX idx_orders_esr ON orders(status, created_at DESC);
-- ❌ Неправильный:CREATE INDEX idx_orders_wrong ON orders(created_at, status);Покрывающие индексы
Заголовок раздела «Покрывающие индексы»-- Запрос:
-- Индекс покрывает все нужные колонкиCREATE INDEX idx_users_covering ON users(email) INCLUDE (id, status);
-- Теперь PostgreSQL читает только индекс, не обращается к таблице!Частичные индексы
Заголовок раздела «Частичные индексы»-- Индексируем только активных пользователейCREATE INDEX idx_active_users ON users(email) WHERE status = 'active';Когда НЕ создавать индексы
Заголовок раздела «Когда НЕ создавать индексы»- Маленькие таблицы (
<1000 строк) - Колонки с низкой селективностью (пол: М/Ж)
- Часто изменяемые колонки
- Редко используемые в WHERE/JOIN
Следующий урок: ACID транзакции →