🗄️ SQL и базы данных  ·  20 вопросов  ·  ~45 мин  ·  ⏱ Таймер 45:00  ·  Сложный  · 

Оптимизация сложного SQL

Итоговый тест не просит выбрать «самый быстрый оператор» в вакууме. В каждом случае есть объём, распределение данных и план: иногда нужен составной или частичный индекс, иногда переписывание коррелированного подзапроса, предварительная агрегация, изменение модели либо отказ от бессмысленного ускорения маленькой таблицы. Решение оценивается по измеряемому узкому месту и цене изменений.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 45 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и разбор каждого задания.
Вопрос 1 из 20
Почему запрос возвращает слишком много строк после JOIN orders и order_items?
SQL
SELECT o.id, o.total
FROM orders o
JOIN order_items i ON i.order_id=o.id;
Вопрос 2 из 20
Как получить заказы, у которых есть позиция sku=$1, не размножая заказы?
Вопрос 3 из 20
Что такое проблема N+1 в выдаче ста заказов?
Вопрос 4 из 20
Почему OFFSET 500000 LIMIT 50 часто дорог?
SQL
SELECT * FROM events ORDER BY created_at,id OFFSET 500000 LIMIT 50;
Вопрос 5 из 20
created_at и id заданы NOT NULL и вместе образуют уникальный порядок. Как переписать глубокую пагинацию?
Вопрос 6 из 20
В плане Nested Loop имеет loops=100000, а внутренний Index Scan возвращает rows=1. Что важно?
SQL
Nested Loop (actual rows=100000 loops=1)
  -> Seq Scan outer
  -> Index Scan inner (actual rows=1 loops=100000)
Вопрос 7 из 20
Оценка плана ожидала 20 строк, а фактически получила 2 000 000. К чему это может привести?
SQL
Index Scan (rows=20) (actual rows=2000000)
Вопрос 8 из 20
Что проверить первым при таком расхождении оценки и факта?
Вопрос 9 из 20
В Sort указано Disk: 8GB. Что это означает?
SQL
Sort Method: external merge  Disk: 8388608kB
Вопрос 10 из 20
Почему верхний Aggregate с временем 12 секунд не обязательно источник проблемы?
Вопрос 11 из 20
Запрос фильтрует tenant_id равенством, created_at диапазоном и сортирует created_at DESC. Какой индекс наиболее естественен?
Вопрос 12 из 20
Когда INCLUDE может помочь?
SQL
CREATE INDEX ON orders (customer_id, created_at DESC) INCLUDE (status,total);
Вопрос 13 из 20
Какой частичный индекс подходит очереди, где почти все задачи уже done?
Вопрос 14 из 20
Почему условие запроса должно логически подразумевать предикат частичного индекса?
SQL
CREATE INDEX ix_ready ON jobs(id) WHERE status='ready';
SELECT * FROM jobs WHERE status IN ('ready','running');
Вопрос 15 из 20
Почему четыре отдельных индекса не всегда заменяют (a,b,c)?
Вопрос 16 из 20
Когда материализованное представление уместнее запроса по сырым данным?
Вопрос 17 из 20
Почему партиционирование не является автоматическим ускорителем?
Вопрос 18 из 20
Когда хранение order_total в orders может быть оправдано?
SQL
orders.total  <->  SUM(order_items.qty * order_items.price)
Вопрос 19 из 20
Какая завершающая часть делает повторный пересчёт дневного итога идемпотентным?
SQL
INSERT INTO daily_sales(day, total)
SELECT $1, SUM(total)
FROM orders
WHERE created_at::date = $1
-- выберите продолжение
Вопрос 20 из 20
Как принять решение об изменении схемы ради скорости?

Ответьте на все 20 вопросов, чтобы получить результат

🔗 Встроить тест на свой сайт (iframe) ▼

Скопируйте код и вставьте в любое место на вашем сайте:

Также доступна прямая ссылка на embed-страницу