Ответ
EXPLAIN — это SQL-команда, которая показывает план выполнения запроса, составленный оптимизатором СУБД. Она не выполняет сам запрос, а анализирует, как он будет выполнен.
Зачем это нужно:
- Выявить узкие места (отсутствие индексов, полные сканирования таблиц).
- Оптимизировать сложные запросы.
- Понять, почему запрос выполняется медленно.
Пример для MySQL/PostgreSQL:
EXPLAIN SELECT * FROM orders WHERE customer_id = 123 AND status = 'SHIPPED';
| Ключевые элементы вывода (на примере MySQL): | Столбец | Значение | Объяснение |
|---|---|---|---|
| type | ref, ALL, index |
Тип доступа к таблице. ALL — тревожный знак (полное сканирование). |
|
| key | idx_customer |
Используемый индекс. NULL — индекс не используется. |
|
| rows | ~50 |
Оценочное количество строк для проверки. | |
| Extra | Using where |
Дополнительная информация (сортировка, временные таблицы). |
В контексте Java/JPA:
- В Hibernate можно включить логирование SQL и затем анализировать сгенерированные запросы через
EXPLAIN. - Некоторые библиотеки (например,
p6spy) позволяют автоматически добавлятьEXPLAINк логгируемым запросам.
EXPLAIN ANALYZE (в PostgreSQL, MySQL 8.0.18+): Фактически выполняет запрос и выдает реальные метрики выполнения (время, количество строк), что еще точнее.