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

Планы выполнения запросов

Вместо заучивания названий узлов нужно прочитать путь данных: сколько строк ожидал оптимизатор, сколько получил, где появились лишние циклы, почему Seq Scan не всегда плох и как Nested Loop, Hash Join и Merge Join соотносятся с объёмом и доступом к входам. Часть заданий использует сокращённые фрагменты EXPLAIN ANALYZE, похожие на рабочую диагностику.

Отвечено: 0 из 20
⏱ --:--
0%
💡 Инструкция: Выбери один ответ из четырёх. В тесте 20 вопросов и 44 минут. После завершения откроются общий процент, четыре тематические шкалы, правильные ответы и разбор каждого задания.
Вопрос 1 из 20
В каком направлении полезно читать дерево плана для понимания потока строк?
ТекстEXPLAIN
Aggregate
  -> Hash Join
       -> Seq Scan on orders
       -> Hash
            -> Seq Scan on customers
Вопрос 2 из 20
Что означает cost=0.00..120.50?
ТекстEXPLAIN
Seq Scan on orders  (cost=0.00..120.50 rows=5000 width=24)
Вопрос 3 из 20
Что означает actual rows=3 loops=100 у внутреннего узла?
ТекстEXPLAIN ANALYZE
Index Scan ... (actual time=0.01..0.02 rows=3 loops=100)
Вопрос 4 из 20
Почему верхний узел обычно имеет время, включающее работу дочерних узлов?
Вопрос 5 из 20
Какой параметр помогает увидеть объём данных одной строки плана?
ТекстEXPLAIN
Hash Join  (cost=... rows=10000 width=128)
Вопрос 6 из 20
Всегда ли Seq Scan означает отсутствие полезного индекса?
ТекстEXPLAIN
Seq Scan on countries  (cost=0.00..1.30 rows=30 width=64)
Вопрос 7 из 20
Почему план мог выбрать Seq Scan для active=true, если true у 98% строк?
Вопрос 8 из 20
Что показывает Index Cond?
ТекстEXPLAIN
Index Scan using orders_customer_idx on orders
  Index Cond: (customer_id = 42)
  Filter: (status = 'paid')
Вопрос 9 из 20
Когда Bitmap Heap Scan часто уместен?
Вопрос 10 из 20
Что означает Rows Removed by Filter: 900000 при 1000 возвращённых строках?
ТекстEXPLAIN ANALYZE
Seq Scan on events
  Rows Removed by Filter: 900000
  actual rows=1000
Вопрос 11 из 20
Когда Nested Loop особенно хорош?
Вопрос 12 из 20
Что настораживает в Nested Loop с внутренним Seq Scan loops=50000?
ТекстEXPLAIN ANALYZE
Nested Loop
  -> Seq Scan on outer_t (actual rows=50000 loops=1)
  -> Seq Scan on inner_t (actual rows=2 loops=50000)
Вопрос 13 из 20
Что обычно делает Hash Join по равенству?
ТекстEXPLAIN
Hash Join
  Hash Cond: (o.customer_id = c.id)
  -> Seq Scan on orders o
  -> Hash
       -> Seq Scan on customers c
Вопрос 14 из 20
Какой риск у Hash Join при сильно недооценённом большом входе?
Вопрос 15 из 20
Что требуется Merge Join в общем случае?
Вопрос 16 из 20
План оценил rows=10, а фактически получил 100000. Почему это важно?
ТекстEXPLAIN ANALYZE
Index Scan ... (cost=... rows=10 ...) (actual ... rows=100000 loops=1)
Вопрос 17 из 20
Что стоит проверить первым при большой ошибке оценки после массовой загрузки?
Вопрос 18 из 20
Почему отдельные статистики по country и city могут плохо оценивать условие country='EE' AND city='Tallinn'?
Вопрос 19 из 20
Где искать первую причину плохого верхнего плана?
Вопрос 20 из 20
Почему EXPLAIN ANALYZE для изменяющего запроса требует осторожности?

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

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

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

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