Этап 5 из 15 · ≈ 6 ч

Индексы и производительность запросов

Основа с Junior

B-дерево, составные и покрывающие индексы, планы запросов и оптимизация.

Что важно знать

  • B-дерево — основной индекс: поиск, диапазоны и сортировка за O(log n).
  • Составной индекс работает слева направо: (user_id, created_at) поможет WHERE user_id = ? ORDER BY created_at.
  • Покрывающий индекс отвечает на запрос без чтения таблицы.
  • Функция над колонкой, неселективное условие, приведение типов — индекс не используется.
  • Каждый индекс замедляет запись и занимает место.
  • EXPLAIN ANALYZE: Seq Scan, Index Scan, оценки строк против фактических.

Критерии освоения

Junior ≈ 6 ч

  • Объясняет, как индекс ускоряет поиск, и создаёт индекс под частый запрос

Практика. Заполнить таблицу миллионом строк, замерить запрос до и после индекса.

Middle ≈ 10 ч

  • Читает EXPLAIN ANALYZE и находит причину медленного запроса
  • Проектирует составные и покрывающие индексы с учётом порядка колонок
  • Объясняет, когда индекс не используется и чем вредят лишние индексы

Практика. Ускорить 5 медленных запросов учебной базы по EXPLAIN ANALYZE, для каждого описать причину и решение.

Senior ≈ 4 ч

  • Организует поиск медленных запросов в продакшене (pg_stat_statements) и их системное исправление

Практика. Настроить сбор статистики запросов и провести разбор топ-10 тяжёлых запросов продакшен-подобной нагрузки.

Проверка знаний

Войдите, чтобы пройти тест: сданный тест отмечает тему пройденной на карте и в ИПР.

Вопросы с собеседований

Смотреть все
Почему индексы в базах данных устроены как B-дерево?Middle

B-дерево — сбалансированное дерево с широкими узлами: в узле сотни ключей, узел = страница на диске (8–16 КБ). Высота 3–4 даже для миллиардов строк — значит, 3–4 чтения страницы.

Полный разбор
Каков основной эффект добавления индекса по столбцу?Junior

Индекс — отдельная упорядоченная структура (обычно B-дерево): поиск по колонке за O(log n) вместо полного просмотра таблицы. Цена — медленнее запись и больше места.

Полный разбор
Чем B-tree индекс принципиально превосходит hash-индекс?Middle

B-дерево упорядочено — поддерживает равенство, диапазоны, сортировку и префиксы строк. Hash-индекс — только равенство. Поэтому почти всегда выбирают B-дерево.

Полный разбор
Запрос стал работать медленно. С чего правильно начать разбор?Junior

Сначала измерить: EXPLAIN ANALYZE покажет, что реально происходит, вместо догадок. Затем — по находке: индекс, переписанный запрос, статистика, N+1.

Полный разбор
Почему в составном индексе важен порядок колонок?Middle

Составной индекс (a, b) отсортирован сначала по a, затем по b — как телефонный справочник по фамилии и имени. Поэтому он помогает в поиске по a и по a + b, но не по одному b.

Полный разбор
Что делает EXPLAIN для SQL-запроса?Middle

EXPLAIN показывает план, который выбрал оптимизатор: способы чтения таблиц, порядок и алгоритмы соединений, оценки числа строк и стоимости. EXPLAIN ANALYZE ещё и выполняет запрос и показывает фактическое время и строки.

Полный разбор
Почему полнотекстовый поиск не делают запросом LIKE '%слово%'?Junior

LIKE '%слово%' не использует обычный индекс (ведущий шаблон) — читает всю таблицу, и качество поиска примитивное: нет морфологии, опечаток, ранжирования.

Полный разбор
Что такое двоичное дерево поиска и зачем его балансировать?Junior

В двоичном дереве поиска для каждого узла слева — меньшие ключи, справа — большие; поиск идёт по одной ветке — O(высоты).

Полный разбор

Разборы темы

← Вся карта «Backend-разработчик»

Партнёр платформы

Разбор собеседования с sotto

После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.

Разбор собеседования