Индексы баз данных
Индексы — это структуры данных, которые улучшают скорость операций поиска в таблице базы данных за счет создания дополнительной структуры для быстрого доступа к строкам.
Типы индексов
- B-Tree Index — наиболее распространенный тип
- Hash Index — для точного поиска по равенству
- Bitmap Index — для колонок с малым количеством уникальных значений
- Partial Index — индекс части таблицы
- Composite Index — индекс по нескольким колонкам
Создание индексов в SQL
1-- Простой индекс
2CREATE INDEX idx_lastname ON users(last_name);
3
4-- Составной индекс
5CREATE INDEX idx_name_age ON users(last_name, age);
6
7-- Уникальный индекс
8CREATE UNIQUE INDEX idx_email ON users(email);
9
10-- Частичный индекс (PostgreSQL)
11CREATE INDEX idx_active_users ON users(last_name)
12WHERE active = true;
13
14-- Индекс с сортировкой
15CREATE INDEX idx_created_desc ON posts(created_at DESC);
Когда использовать индексы
- Колонки в WHERE условиях
- Колонки в JOIN операциях
- Колонки в ORDER BY
- Колонки в GROUP BY
- Внешние ключи
Недостатки индексов
- Дополнительное место — требуют дискового пространства
- Замедление записи — INSERT, UPDATE, DELETE становятся медленнее
- Обслуживание — требуют поддержки при изменении данных
Анализ производительности
Best practices
- Не создавайте избыточные индексы
- Рассматривайте составные индексы
- Мониторьте использование индексов
- Учитывайте селективность колонок
- Удаляйте неиспользуемые индексы
FAQ
Сколько индексов можно создать на таблице?
Технически ограничения зависят от СУБД, но практически стоит ограничиться 5-7 индексами на таблицу из-за накладных расходов.