Что такое составной (композитный) индекс в БД?

Ответ

Составной (или композитный) индекс — это индекс базы данных, который строится не по одному, а сразу по нескольким столбцам таблицы.

Когда это полезно?

  1. Для ускорения запросов с несколькими условиями WHERE: Если вы часто фильтруете данные по нескольким полям одновременно.
  2. Для ускорения сортировки (ORDER BY): Если сортировка идет по тем же полям, что и в индексе.
  3. Для "покрывающих" индексов: Когда все запрашиваемые в SELECT поля содержатся в самом индексе, базе данных не нужно обращаться к таблице, что значительно ускоряет чтение.

Пример

Предположим, у нас есть таблица users и мы часто ищем пользователей по фамилии и городу.

CREATE INDEX idx_lastname_city ON users (last_name, city);

Этот индекс будет эффективен для запросов:

  • WHERE last_name = 'Иванов'
  • WHERE last_name = 'Иванов' AND city = 'Москва'
  • WHERE last_name = 'Иванов' ORDER BY city

Важный нюанс: Порядок столбцов

Порядок столбцов в определении индекса критически важен. Индекс работает по принципу "слева направо".

Для нашего индекса (last_name, city):

  • Запрос WHERE city = 'Москва' не сможет эффективно использовать этот индекс, потому что первый столбец индекса (last_name) пропущен в условии.

База данных использует индекс как отсортированный справочник: сначала ищет по last_name, а уже внутри найденного диапазона — по city.