← Назад к вопросам

Какие плюсы и минусы индексов в БД?

2.0 Middle🔥 181 комментариев
#Базы данных и SQL

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI29 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Какие плюсы и минусы индексов в БД?

Индексы — это одна из самых важных конструкций в базах данных для оптимизации performance'а.

Плюсы индексов

1. Ускорение поиска (SELECT)

Без индекса БД должна просканировать всю таблицу (full table scan — O(n)). С индексом поиск O(log n) через B-tree.

Пример: Таблица с 1 млрд записей

  • Без индекса: ~5 секунд
  • С индексом: ~5 миллисекунд

2. Ускорение JOIN'ов

Индекс на foreign key позволяет быстро найти matching rows.

3. Ускорение сортировки и GROUP BY

Индекс на колонке GROUP BY позволяет избежать сортировки в памяти.

4. Поддержка UNIQUE ограничений

Уникальный индекс гарантирует что значение появляется только один раз.

5. Улучшение ORDER BY и RANGE queries

Индекс быстро находит диапазон значений.

Минусы индексов

1. Замедление вставок (INSERT)

Каждая вставка требует обновление всех индексов. С 5 индексами вставка в 5 раз медленнее.

2. Замедление обновлений (UPDATE)

Обновление колонки требует обновить индекс на ней.

3. Замедление удаления (DELETE)

Удаление требует удалить из всех индексов.

4. Использование памяти и диска

Индекс требует дополнительное место (может быть 10-30% от размера таблицы).

5. Индекс может не использоваться

Индекс может пусто тратить место если запросы его не используют.

6. Планировщик может выбрать неоптимальный план

Иногда СУБД выбирает full scan вместо индекса если думает что быстрее.

Типы индексов

ТипПоискВставкаПамятьКогда
B-treeO(log n)O(log n)СредняяОбычный случай
HASHO(1)O(1)СредняяТочные совпадения
FULLTEXTO(1)O(n)БольшаяПолнотекстовый поиск

Правила индексирования

  1. Индексируй колонки в WHERE — где часто ищешь
  2. Используй composite индексы — несколько колонок в одном индексе
  3. Избегай индексов на low cardinality — мало уникальных значений
  4. Не индексируй всё подряд — только необходимое
  5. Анализируй EXPLAIN план — проверяй использует ли индекс

Практический подход

OLTP (много INSERT/UPDATE): Мало индексов, быстрая запись

OLAP (много SELECT): Много индексов, быстрое чтение

Индексы — это про trade-off между читаемостью и записью. Правильный выбор требует понимания access pattern'ов приложения.

Какие плюсы и минусы индексов в БД? | PrepBro