Ответ
Составной (или композитный) индекс — это индекс базы данных, который строится не по одному, а сразу по нескольким столбцам таблицы.
Когда это полезно?
- Для ускорения запросов с несколькими условиями
WHERE
: Если вы часто фильтруете данные по нескольким полям одновременно. - Для ускорения сортировки (
ORDER BY
): Если сортировка идет по тем же полям, что и в индексе. - Для "покрывающих" индексов: Когда все запрашиваемые в
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
.