Наверное каждый аналитик в какой-то момент сталкивается с тем, что запрос начинает отрабатывать слишком долго (иногда даже часами, если в базе данных не установлены лимиты). Делюсь тремя функциями, которые позволяют найти, что и как оптимизировать
Суть всех функций похожа - рассказать, как база данных собирается выполнять запрос и какие ресурсы на него потратит. Но есть некоторые отличия
EXPLAINПоказывает, как база данных планирует выполнить ваш запрос. Вы увидите общий порядок операций и оценку вычислительных затрат на них. Подходит для определения самых очевидных узких мест
EXPLAIN VERBOSEУглубленная версия EXPLAIN. Дает ещё больше деталей о плане выполнения, включая информацию об используемых колонках, способах джойна, сортировки и многое друго. Полезно, когда из обычного EXPLAIN не ясно что в запросе медленно работает
PROFILEСамый мощный инструмент и мой любимый. Он не просто пишет план, он выполняет запрос, а потом показывает реальные затраты ресурсов (время, CPU) на каждом шаге выполнения запроса. Это помогает точно определить "бутылочное горлышко" и оптимизировать его.
Синтаксис у функций одинаковый
EXPLAIN -- или EXPLAIN VERBOSE или PROFILE
SELECT *
FROM table
....
Ну и общий совет. Не стесняйтесь показывать результаты выполнения этих функций чату gpt. Функции возвращают достаточно подробный и не всегда понятный ход действий БД и понять его гораздо легче с помощью нейросетки, особенно в начале