Индексы в базах данных — шпаргалка для системного аналитика
На технических собеседованиях вопросы про индексы задают регулярно — и не только DBA. Системный аналитик, архитектор и даже старший бизнес-аналитик должен уметь объяснить, почему на определённом запросе «всё лагает», и предложить решение. Именно здесь часто ждут ответ про индексы.
Блок про индексы обычно идет после общего блока про базы данных и до блока с написанием SQL запросов.
Что такое индекс? Отдельная структура, которая позволяет базе не читать всю таблицу, а сразу находить нужные строки. Как содержание в книге.
Главный компромисс индексов 🟢 SELECT работает быстрее 🔴 INSERT / UPDATE / DELETE медленнее, каждый индекс надо обновлять при каждом изменении строки
Какие бывают типы индексов ➖B-tree — универсальный, работает для =, <, >, BETWEEN, ORDER BY. По умолчанию в большинстве СУБД ➖Hash — только точное равенство =, очень быстро, но больше ни для чего ➖GIN — массивы, JSONB, полнотекстовый поиск ➖BRIN — огромные таблицы с монотонной вставкой (логи, события) ➖Составной — несколько колонок; порядок критичен — сначала =, потом интервал ➖Частичный — индексирует только часть строк: WHERE status = 'pending' ➖Покрывающий — включает все нужные SELECT колонки через INCLUDE, исключает обращение к таблице
Когда индекс НЕ нужен ➖Таблица маленькая ➖Столбец с низкой кардинальностью: is_active, gender ➖Запрос LIKE '%text%' — B-tree не поможет ➖Функция над колонкой: WHERE YEAR(created_at) = 2026 — индекс не используется ➖Таблица пишется очень активно, а читается редко
Правило для составного индекса 1. Колонки на равенство 2. Колонки на период 3. Сортировка
Пример для запроса WHERE status = ? AND created_at >= ? ORDER BY priority
Полная статья с примерами, антипаттернами на сайте: https://bv-dev.ru/indexes-interview-prep/
· 02.07
В реальности , ситуация с индексами немножко сложнее - есть сценарии при которых иноекс замедляет SELECT. Но вряд ли проводящие собеседование в курсе таких аномалий, конечно.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 02.07
А почему они должны быть не в курсе? по сути вы говорите про блок "когда индекс не нужен" или какие-то моменты, когда статистика не обновляется.
Обычно на собеседовании не очень много времени, а спросить надо много, поэтому супер подробно каждую тему не раскрыть
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 02.07
Не в курсе потому , что тема очень специфическая и мало озвученная . В интернете уже мантра - хотите увеличить производительность добавьте индекс. Впрочем это на самом деле не проблема вообще - потому что не скоуп аналитика - индексы настраивать. К тому же в 99% отсутствие индекса хуже и заметно , а лишний индекс может и не проявиться всю жизнь.
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 02.07
Максимум что я встречал в задачах аналитика, при проектировании таблицы указать поля для индекса или поля выборки и фильтрации.
Но дальше часто есть кто-то отвечающий за БД и он может сделать иначе
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён
· 02.07
Именно так. И это логично
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён