Что такое составной индекс и в каких сценариях его следует использовать?

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

Ответ

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

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

-- Создание индекса по customer_id и status
CREATE INDEX idx_orders_customer_status ON orders(customer_id, status);

-- Этот запрос будет эффективно использовать индекс
SELECT * FROM orders WHERE customer_id = 123 AND status = 'SHIPPED';

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

  1. Порядок столбцов критически важен. Индекс (A, B, C) может быть использован для запросов с условиями по (A), (A, B) или (A, B, C), но не по (B) или (C) отдельно.
  2. Селективность: Первым в индексе стоит размещать наиболее селективный столбец (с наибольшим разнообразием значений).
  3. Включение столбцов: В некоторых СУБД (например, PostgreSQL с INCLUDE, SQL Server) можно включить в индекс дополнительные столбцы только для покрытия запроса (covering index), чтобы избежать обращения к таблице.

Практический результат: В проекте применение составных индексов для частых WHERE-запросов с несколькими условиями дало прирост производительности до 40%.