Как будешь использовать индексы для оптимизации

«Как будешь использовать индексы для оптимизации» — вопрос из категории SQL, который задают на 38% собеседований Продуктовый Аналитик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Индексы ускоряют поиск и сортировку данных, но замедляют вставку и обновление. Основные правила:

  1. Индексируй часто используемые поля в WHERE, JOIN, ORDER BY
    CREATE INDEX idx_user_email ON users(email);  -- для поиска по email
  1. Составные индексы учитывают порядок полей. Оптимально: сначала высокоселективные поля.
    CREATE INDEX idx_order_status_date ON orders(status, created_at);  -- для фильтрации по статусу + сортировки по дате
  1. Избегай избыточности. Если есть индекс (A, B), отдельный индекс на (A) не нужен.

  2. Мониторь использование индексов через EXPLAIN ANALYZE. Удаляй неиспользуемые.

  3. Частые антипаттерны:

    • Индексы на поля с низкой селективностью (например, gender).
    • Слишком много индексов на таблицу с частыми записьми.

Пример для PostgreSQL:

EXPLAIN ANALYZE SELECT * FROM orders WHERE status = 'shipped' ORDER BY created_at DESC;  
-- Если нет индекса (status, created_at), будет filesort (медленно).