Составной индекс — это индекс, включающий несколько полей, который используется для повышения производительности запросов, фильтрующих данные сразу по нескольким колонкам.
Проще всего представить составной индекс не как последовательность индексов по отдельным колонкам, а как индекс по объединённым значениям этих колонок. Поэтому порядок столбцов в составном индексе имеет значение. Он влияет на эффективность индекса, и поэтому чаще всего наиболее селективные поля следует располагать первыми для максимальной производительности. SQL-запросы также должны учитывать этот порядок== для оптимального использования индекса.
Однако, есть исключительные ситуации из этого правила:
Преимущества:
- Оптимизация дискового пространства: Один составной индекс может заменить несколько простых индексов, что экономит дисковое пространство.
- Ускорение запросов: Составной индекс позволяет ускорять запросы, которые используют несколько колонок для фильтрации и сортировки данных.
Недостатки:
- Высокие накладные расходы при обновлении: Каждый раз при вставке, обновлении или удалении данных, которые попадают в составной индекс, СУБД должна обновлять весь индекс, что может увеличивать время выполнения таких операций.
- Старайтесь минимизировать использование неравенств в начале составных индексов, так как это может ограничить их применение для последующих колонок.
Количество параметров
Составной индекс из 2-3 полей обычно считается нормальным и эффективно поддерживаемым. Если количество колонок в индексе превышает три, следует тщательно анализировать его использование, чтобы избежать излишней нагрузки на производительность.
Создание составного индекса:
Запросы, которые могут использовать этот индекс:
Фильтрация по обоим полям:
Этот запрос будет максимально эффективен, так как учитывает оба поля в порядке, указанном в индексе.
Фильтрация только по customer_id
:
Этот запрос также будет использовать индекс, поскольку customer_id
— первая колонка в составном индексе.
Запрос, который не будет оптимально использовать составной индекс:
Такой запрос не использует весь потенциал индекса, так как order_date
не является первой колонкой.
Мета информация
Область:: 00 Базы Данных
Родитель:: Индекс базы данных
Источник::
Автор::
Создана:: 2024-06-16