Индексы баз данных

Индексы — это структуры данных, которые улучшают скорость операций поиска в таблице базы данных за счет создания дополнительной структуры для быстрого доступа к строкам.

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

  • 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 становятся медленнее
  • Обслуживание — требуют поддержки при изменении данных

Анализ производительности

1-- PostgreSQL
2EXPLAIN ANALYZE SELECT * FROM users WHERE last_name = 'Smith';
3
4-- MySQL
5EXPLAIN SELECT * FROM users WHERE last_name = 'Smith';
6
7-- SQL Server
8SET STATISTICS IO ON;
9SELECT * FROM users WHERE last_name = 'Smith';

Best practices

  • Не создавайте избыточные индексы
  • Рассматривайте составные индексы
  • Мониторьте использование индексов
  • Учитывайте селективность колонок
  • Удаляйте неиспользуемые индексы

FAQ

Сколько индексов можно создать на таблице?

Технически ограничения зависят от СУБД, но практически стоит ограничиться 5-7 индексами на таблицу из-за накладных расходов.