Что такое составной индекс в базах данных?

«Что такое составной индекс в базах данных?» — вопрос из категории Базы данных, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Ключевые принципы:

  • Порядок столбцов критичен. Индекс работает эффективно только для запросов, использующих префикс индекса (столбцы слева направо).
  • Покрывающий индекс (covering index). Если индекс содержит все поля, запрашиваемые в SELECT, база данных может выполнить запрос, обращаясь только к индексу, без чтения основной таблицы.
  • Экономия ресурсов. Один составной индекс часто эффективнее нескольких отдельных индексов.

Пример создания и использования (SQL):

-- Создание индекса по фамилии и возрасту
CREATE INDEX idx_users_last_name_age ON users(last_name, age);

-- Эффективные запросы (используют префикс индекса):
SELECT * FROM users WHERE last_name = 'Ivanov';
SELECT * FROM users WHERE last_name = 'Ivanov' AND age = 30;
SELECT * FROM users WHERE last_name = 'Ivanov' ORDER BY age;

-- НЕЭФФЕКТИВНЫЙ запрос (не использует префикс):
SELECT * FROM users WHERE age = 30; -- Индекс не будет использован или будет использован неоптимально

Почему порядок важен? Индекс (A, B, C) хранит данные, отсортированные сначала по A, затем по B, и затем по C. Запрос с условием на B без A не может использовать эту упорядоченность.