Ответ
Индексы ускоряют поиск и сортировку данных, но замедляют вставку и обновление. Основные правила:
- Индексируй часто используемые поля в WHERE, JOIN, ORDER BY
CREATE INDEX idx_user_email ON users(email); -- для поиска по email
- Составные индексы учитывают порядок полей. Оптимально: сначала высокоселективные поля.
CREATE INDEX idx_order_status_date ON orders(status, created_at); -- для фильтрации по статусу + сортировки по дате
-
Избегай избыточности. Если есть индекс (A, B), отдельный индекс на (A) не нужен.
-
Мониторь использование индексов через
EXPLAIN ANALYZE. Удаляй неиспользуемые. -
Частые антипаттерны:
- Индексы на поля с низкой селективностью (например,
gender). - Слишком много индексов на таблицу с частыми записьми.
- Индексы на поля с низкой селективностью (например,
Пример для PostgreSQL:
EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'shipped' ORDER BY created_at DESC;
-- Если нет индекса (status, created_at), будет filesort (медленно).