Один вопрос про базы данных, который отличает мидла от сеньора за 2 минуты
Запрос, который ломает собесы
Представь: тебе показывают таблицу orders на 12 миллионов строк и запрос:
SELECT * FROM orders
WHERE user_id = 42 AND status = 'completed'
ORDER BY created_at DESC
LIMIT 20;
«Запрос выполняется 8 секунд. Почему? Как ускоришь?»
По данным анализа 9 247 технических интервью за 2025–2026 год, вопросы по базам данных и SQL встречаются примерно в 11% бэкенд-собесов. И именно на вопросах про оптимизацию запросов отсеиваются те, кто знает SQL, но не понимает, как работает база.
Ответ мидла: «Добавлю индекс»
Типичный ответ мидла звучит так: «Нужно добавить индекс на user_id». Иногда — «составной индекс на user_id и status». Это не неправильно. Но это ответ вслепую.
Интервьюер слышит: кандидат знает, что индексы ускоряют запросы. Но не знает, как проверить свою гипотезу. Не знает, читает ли база индекс вообще. Не знает, что индекс может существовать — и не использоваться.
Вот что мидл обычно не учитывает:
- Индекс уже может быть. Может, проблема не в его отсутствии, а в том, что оптимизатор выбрал Seq Scan, потому что
user_id = 42возвращает 40% таблицы. - Порядок колонок в составном индексе имеет значение.
(user_id, status)и(status, user_id)— это два разных индекса с разной эффективностью. ORDER BYбез покрывающего индекса = filesort. Даже если WHERE отработал по индексу, сортировка 50 тысяч строк в памяти убьёт производительность.
Ответ сеньора: «Покажи EXPLAIN»
Сеньор не гадает. Первое, что он говорит:
EXPLAIN ANALYZE
SELECT * FROM orders
WHERE user_id = 42 AND status = 'completed'
ORDER BY created_at DESC
LIMIT 20;
И дальше читает результат как рентгеновский снимок:
- Seq Scan vs Index Scan — база вообще использует индекс?
- Rows estimated vs actual — оптимизатор правильно оценивает кардинальность?
- Sort Method: external merge — сортировка ушла на диск?
- Filter vs Index Cond — фильтрация по индексу или постфактум?
Только после этого сеньор предлагает решение. И оно конкретное:
CREATE INDEX idx_orders_user_status_created
ON orders (user_id, status, created_at DESC);
Почему именно такой? Потому что:
user_idиstatus— в WHERE, они идут первымиcreated_at DESC— покрывает ORDER BY, избавляя от filesort- Это покрывающий индекс для сортировки — база достаёт уже отсортированные данные
Почему это важно интервьюеру
Интервьюер проверяет не знание синтаксиса CREATE INDEX. Он проверяет мышление.
Мидл-мышление: «Есть проблема → знаю инструмент → применяю». Это работает в 60% случаев. В остальных 40% ты добавишь индекс, который база проигнорирует, или создашь пятый индекс на таблицу, где проблема была в SELECT *.
Сеньор-мышление: «Есть проблема → измеряю → понимаю причину → применяю точечно». EXPLAIN — это не просто команда. Это подход: сначала данные, потом решение.
На реальных собесах этот подход раскрывается в follow-up вопросах:
- «А если
user_id = 42возвращает миллион строк?» — сеньор скажет про селективность и почему оптимизатор может выбрать Seq Scan - «А что с записью?» — сеньор упомянет, что каждый индекс замедляет INSERT/UPDATE, и предложит мониторить
pg_stat_user_indexesдля неиспользуемых индексов - «А если нужны только
idиcreated_at?» — сеньор предложит покрывающий индекс с INCLUDE, чтобы избежать обращения к таблице
Три вещи, которые стоит запомнить
1. EXPLAIN перед любым изменением. Не добавляй индекс, пока не прочитал план выполнения. Это как чинить машину, не открыв капот.
2. Составной индекс — не просто «два поля вместе». Порядок колонок определяет, какие запросы он покрывает. Правило: сначала колонки из WHERE (с равенством), потом из ORDER BY, потом из SELECT для покрытия.
3. Индексы — это trade-off. Каждый индекс ускоряет чтение и замедляет запись. На таблице с 80% записей и 20% чтений лишний индекс — это проблема, а не решение.
Если ты готовишься к собесу и хочешь перейти от «знаю SQL» к «понимаю базы» — попробуй Sobes AI. Он задаёт именно такие вопросы с follow-up'ами и разбирает твои ответы, чтобы ты пришёл на собес с мышлением сеньора, а не с заученными определениями.
Кстати, если хочешь подтянуть SQL в целом — у нас есть разбор вопросов по SQL для мидлов с конкретными задачами и объяснениями.
Готовитесь к собеседованию?
Sobes AI слушает вопросы интервьюера и генерирует ответы в реальном времени.
Скачать Sobes AI