Ответ
Да, EXPLAIN (или EXPLAIN ANALYZE в PostgreSQL) — это мой основной инструмент для диагностики медленных запросов и оптимизации работы с базой данных.
Как я это применяю на практике:
- Выявляю проблемный запрос через лог медленных запросов или мониторинг (например, Laravel Telescope).
- Анализирую план выполнения. Ключевое, на что смотрю:
type(в MySQL) /type(в PostgreSQL):ALL(полное сканирование таблицы) — это красный флаг.key(в MySQL): Указывает, используется ли индекс.NULL— плохой знак.rows: Оценочное количество строк, которое движку БД придется проверить. Чем меньше, тем лучше.Extra: Поле с подсказками, например,Using filesortилиUsing temporary— часто указывает на необходимость оптимизации.
Пример из жизни: Был запрос для поиска пользователей по email и дате регистрации:
SELECT * FROM users WHERE email LIKE '%@example.com' AND created_at > '2023-01-01';
EXPLAIN показал type: ALL и key: NULL. Запрос выполнял полное сканирование таблицы на миллионах записей.
Решение:
- Добавил составной индекс, покрывающий оба поля в условии
WHERE:CREATE INDEX idx_users_email_created ON users(email, created_at); - Переписал запрос, чтобы он мог эффективно использовать индекс (избегая
LIKEс ведущим%, где это возможно).
После этого EXPLAIN показал type: range и использование нового индекса, что привело к ускорению запроса в сотни раз.