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

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

Ответ

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

Пример создания в SQL:

CREATE INDEX idx_lastname_age ON users(last_name, age);

Ключевые особенности:

  1. Порядок столбцов критичен. Индекс эффективен для запросов, которые используют:
    • Только первый столбец (WHERE last_name = 'Ivanov').
    • Первый и второй столбцы вместе (WHERE last_name = 'Ivanov' AND age > 30).
    • Только второй столбец не будет эффективно использовать этот индекс.
  2. Поддержка сортировки. Индекс (A, B) может использоваться для сортировки ORDER BY A, B.
  3. Использование в JPA/Hibernate:
    @Entity
    @Table(indexes = @Index(name = "idx_user_name_age", columnList = "lastName, age"))
    public class User {
    private String lastName;
    private Integer age;
    }

Зачем это нужно? Один составной индекс часто эффективнее нескольких отдельных для сложных условий WHERE и ORDER BY.