Как узнать, какие индексы задействованы в SQL-запросе?

«Как узнать, какие индексы задействованы в SQL-запросе?» — вопрос из категории Базы данных, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Основной инструмент для анализа использования индексов — оператор EXPLAIN (или EXPLAIN ANALYZE для более детальной информации).

Пример в MySQL:

EXPLAIN SELECT id, name FROM users WHERE email = 'user@example.com' AND active = 1;

Ключевые поля в выводе EXPLAIN:

  • possible_keys: Какие индексы могли бы быть использованы.
  • key: Какой индекс фактически был использован.
  • key_len: Длина используемой части индекса.
  • type: Тип соединения (например, ref, range, index, ALL для полного сканирования).
  • rows: Оценочное количество строк для проверки.

Дополнительные команды для работы с индексами:

-- Показать все индексы для таблицы
SHOW INDEX FROM users;

-- Принудительно предложить оптимизатору использовать конкретный индекс
SELECT * FROM users USE INDEX (idx_email) WHERE email LIKE 'a%';

-- Проанализировать таблицу для обновления статистики, используемой оптимизатором
ANALYZE TABLE users;

Практический пример анализа: Если EXPLAIN показывает type: ALL для большой таблицы, это признак отсутствия подходящего индекса. Создание индекса по полям WHERE или JOIN обычно решает проблему.

-- Создание составного индекса для запроса выше
CREATE INDEX idx_email_active ON users(email, active);
-- После этого повторный EXPLAIN должен показать использование этого индекса (key: idx_email_active).