Вопрос проверяет, умеешь ли ты находить медленные запросы и понимать, где именно теряется производительность при работе с БД.
Узкие места в запросах выявляют с помощью логов медленных запросов, анализа плана выполнения (EXPLAIN, EXPLAIN ANALYZE) и статистики БД. Эти инструменты показывают, какие операции занимают больше всего времени: сканирование таблиц, сортировки или джойны. Дополнительно смотрят на частоту выполнения запросов и их среднее время. Это помогает понять, что именно нужно оптимизировать — запрос, индекс или модель данных.
Медленные запросы редко «просто медленные». Обычно есть конкретная причина, которую можно найти с помощью стандартных инструментов БД.
Bottleneck — участок запроса или системы, который ограничивает общую производительность и замедляет выполнение.
Первый шаг — понять, какие запросы вообще проблемные.
Обычно включают:
логирование запросов дольше заданного порога (например, 200–500 мс);
сбор статистики по времени выполнения.
Это позволяет ответить на вопрос: что именно тормозит, а не «кажется, что всё медленно».
Когда проблемный запрос найден, смотрят его план выполнения.
EXPLAIN ANALYZE
SELECT *
FROM orders
WHERE user_id = 123
ORDER BY created_at DESC;
Что обычно ищут:
Seq Scan вместо Index Scan;
слишком большие Rows;
дорогие Sort и Hash Join.
Важно:
EXPLAIN показывает план,
EXPLAIN ANALYZE — реальное время выполнения.
Частые проблемы:
отсутствует индекс по WHERE или JOIN;
индекс есть, но не используется из-за типа запроса;
индекс не селективный.
Пример симптома:
фильтрация по колонке есть, а БД всё равно читает всю таблицу.
Даже «быстрый» запрос может быть проблемой, если:
он выполняется тысячи раз в секунду;
вызывается в цикле или внутри N+1 проблемы.
Поэтому смотрят:
суммарное время;
количество вызовов.
Узкие места ищут не «на глаз», а через логи, планы выполнения и статистику. Почти всегда проблема либо в отсутствии индекса, либо в неудачной структуре запроса, либо в слишком частом выполнении.