Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Какие плюсы и минусы индексов в БД?
Индексы — это одна из самых важных конструкций в базах данных для оптимизации 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-tree | O(log n) | O(log n) | Средняя | Обычный случай |
| HASH | O(1) | O(1) | Средняя | Точные совпадения |
| FULLTEXT | O(1) | O(n) | Большая | Полнотекстовый поиск |
Правила индексирования
- Индексируй колонки в WHERE — где часто ищешь
- Используй composite индексы — несколько колонок в одном индексе
- Избегай индексов на low cardinality — мало уникальных значений
- Не индексируй всё подряд — только необходимое
- Анализируй EXPLAIN план — проверяй использует ли индекс
Практический подход
OLTP (много INSERT/UPDATE): Мало индексов, быстрая запись
OLAP (много SELECT): Много индексов, быстрое чтение
Индексы — это про trade-off между читаемостью и записью. Правильный выбор требует понимания access pattern'ов приложения.