Добавить в корзинуПозвонить
Найти в Дзене

Индексы в базах данных — шпаргалка для системного аналитика

На технических собеседованиях вопросы про индексы задают регулярно — и не только DBA. Системный аналитик, архитектор и даже старший бизнес-аналитик должен уметь объяснить, почему на определённом запросе «всё лагает», и предложить решение. Именно здесь часто ждут ответ про индексы. Блок про индексы обычно идет после общего блока про базы данных и до блока с написанием SQL запросов. Что такое индекс? Отдельная структура, которая позволяет базе не читать всю таблицу, а сразу находить нужные строки. Как содержание в книге. Главный компромисс индексов 🟢 SELECT работает быстрее 🔴 INSERT / UPDATE / DELETE медленнее, каждый индекс надо обновлять при каждом изменении строки Какие бывают типы индексов ➖B-tree — универсальный, работает для =, <, >, BETWEEN, ORDER BY. По умолчанию в большинстве СУБД ➖Hash — только точное равенство =, очень быстро, но больше ни для чего ➖GIN — массивы, JSONB, полнотекстовый поиск ➖BRIN — огромные таблицы с монотонной вставкой (логи, события) ➖Составной — нес

Индексы в базах данных — шпаргалка для системного аналитика

На технических собеседованиях вопросы про индексы задают регулярно — и не только 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/

#ГотовимсяКСобеседованию