Дана таблица orders(user_id, created_at, amount) с B-tree индексом по created_at. Аналитик пишет WHERE DATE(created_at) = '2026-07-15' и запрос идёт по Seq Scan вместо индекса. Что исправит план быстрее всего?
SQLmediummiddle
Проверяет владение SQL: выборки, агрегации, JOIN-ы и оконные функции.
sargabilityиндексыEXPLAIN
Варианты ответа
Переписать условие как created_at >= '2026-07-15' AND created_at < '2026-07-16' — тогда индекс по created_at станет sargable
Обернуть запрос в подзапрос SELECT * FROM (SELECT ... ) AS t — планировщик перестроит план и применит индекс по created_at внутри вложенного блока
Заменить DATE(created_at) на CAST(created_at AS DATE) = '2026-07-15' — явное приведение типов делает условие sargable и включает индекс
Добавить второй B-tree индекс на amount — планировщик подхватит его для фильтра по дате и уйдёт с Seq Scan на Index Scan
Как разобрать этот вопрос на собеседовании
Начни с разбора схемы: какие таблицы и ключи участвуют, где могут быть NULL и дубли строк. Затем реши, что важнее — JOIN, агрегация с GROUP BY/HAVING, оконная функция или подзапрос. На собеседовании ценят не только правильный результат, но и умение проговорить план запроса и крайние случаи (пустые группы, деление на ноль, фан-аут при JOIN).
На собеседовании по такому вопросу важно не только назвать ответ, но и кратко объяснить, почему он верный.
Тема вопроса — «SQL». Чтобы подготовиться к похожим задачам, отрабатывай их на практике: sql-тренажёр помогает довести навык до автоматизма, а раздел вопросов — увидеть формулировки, которые реально встречаются на интервью аналитика данных.
Разбор ответа
Подробный разбор с объяснением «почему правильный ответ верный» и почему остальные неверны — после регистрации.
3000+ вопросов с разбором, quiz-режим с проверкой, AI-собес и подготовка к интервью аналитика.