awesome-everything EN
↑ Обратно к восхождению

Базы данных

Индексы: тест с выбором ответа

Суть Тест с выбором на синтез по всему юниту об индексах — leading-column rule, partial и covering индексы, index-only scan и Visibility Map, выбор типа индекса и production-сбои.
Высота — путь к senior
НольJuniorMiddleSenior
Ты на senior-высоте — в орбите
◷ 13 min

Шесть вопросов поперёк всего юнита. Ни один не про заучивание определений — каждый отражает решение по проектированию или инцидент, который ты взвешиваешь под реальной нагрузкой запросов, где неправильный индекс стоит места на диске, write-пропускной способности или ночного пейджа.

Цель

Убедись, что связываешь анатомию B-tree, leading-column rule, partial и covering индексы, index-only scan, выбор типа индекса и production-сбои — тот синтез, к которому вели семь уроков.

Викторина

У multi-tenant дашборда есть индекс (workspace_id, status, created_at). Новый аналитический запрос делает WHERE status = 'pending' ORDER BY created_at DESC без фильтра по workspace_id и получает sequential scan. Как чинить, не нарушая дисциплину дизайна из юнита?

Викторина

В таблице tasks на 100M строк 80% имеют status = 'done' (дашборд их никогда не читает). Дашборд читает только open и in_progress. Какая стратегия индекса минимизирует и размер, и write-overhead?

Викторина

EXPLAIN (ANALYZE, BUFFERS) показывает Index Only Scan с Heap Fetches: 12000 на таблице orders, и запрос медленный, несмотря на правильный covering index. Что происходит и какой устойчивый фикс?

Викторина

DELETE FROM posts WHERE id = 42 с ON DELETE CASCADE занимает 7 минут и всё это время держит блокировки, на схеме posts/comments. В чём корневая причина?

Викторина

orders.user_id это BIGINT с индексом orders(user_id). Запрос делает SELECT * FROM orders WHERE user_id = '42' (литерал TEXT) и получает Seq Scan. Почему и какой фикс?

Викторина

Поиск делает WHERE title ILIKE '%invoice%' на таблице в 50M строк и занимает 12 секунд. Запрос — это keyword-поиск по тексту документов. Какой правильный выбор индекса?

Итог

Сквозная линия юнита — один цикл проектирования: composite используется только от ведущего префикса, поэтому проектируй его вокруг всегда присутствующего фильтра; partial-предикаты урезают индекс по горячему подмножеству до доли полного размера и пропускают записи холодных строк; INCLUDE плюс свежая Visibility Map позволяют index-only scan пропускать heap; тип индекса должен соответствовать форме данных (B-tree для упорядоченных значений, GIN для текста и JSONB, HNSW для семантики); а повторяющиеся сбои — отсутствующий FK-индекс, приведение типа, устаревшая статистика, ведущий wildcard в ILIKE — все сводятся к подгонке индекса под точный вопрос, который задаёт запрос, проверенной через EXPLAIN (ANALYZE, BUFFERS).

Продолжить восхождение ↑Индексы: тест на припоминание
хоткеи развернуть
поиск
K
пред. пьеса
k
след. пьеса
j
тиры
t
это меню
?
sources3
expand
  1. 01
  2. 02
  3. 03

Trademarks belong to their respective owners. Editorial reference only.