digital-garden/dev/database/Составные индексы в БД.md
Struchkov Mark 8749f8afcd
All checks were successful
continuous-integration/drone/push Build is passing
continuous-integration/drone Build is passing
Индекс базы данных.md
2024-10-25 21:35:39 +03:00

4.9 KiB
Raw Blame History

aliases tags date
Составные индексы
maturity/🌱
2024-06-16

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

==В составных индексах важен порядок столбцов.== Порядок колонок в индексе влияет на его эффективность, и более Селективность колонки поля должны идти первыми, чтобы максимизировать производительность. SQL-запросы также должны следовать этому порядку для оптимального использования индекса.

При поиске по составному индексу значения колонок сравниваются по порядку, что делает порядок следования колонок критически важным для эффективности запросов.

[!WARNING] Количество параметров Составной индекс из 2-3 полей обычно считается нормальным и эффективно поддерживаемым. Если количество колонок в индексе превышает три, следует тщательно анализировать его использование, чтобы избежать излишней нагрузки на производительность.

Преимущества:

  • Оптимизация дискового пространства: ==Один составной индекс может заменить несколько простых индексов==, что экономит дисковое пространство.
  • Ускорение запросов: Составной индекс позволяет ускорять запросы, которые используют несколько колонок для фильтрации и сортировки данных.

Недостатки:

  • Высокие накладные расходы при обновлении: Каждый раз при вставке, обновлении или удалении данных, которые попадают в составной индекс, СУБД должна обновлять весь индекс, что может увеличивать время выполнения таких операций.
  • Старайтесь минимизировать использование неравенств в начале составных индексов, так как это может ограничить их применение для последующих колонок.

Создание составного индекса:

CREATE INDEX idx_example ON table_name (column_a, column_b);

Запросы, которые могут использовать этот индекс:

Фильтрация по обоим полям:

SELECT * FROM orders WHERE customer_id = 123 AND order_date >= '2024-01-01';

Этот запрос будет максимально эффективен, так как учитывает оба поля в порядке, указанном в индексе.

Фильтрация только по customer_id:

SELECT * FROM orders WHERE customer_id = 123;

Этот запрос также будет использовать индекс, поскольку customer_id — первая колонка в составном индексе.

Запрос, который не будет оптимально использовать составной индекс:

SELECT * FROM orders WHERE order_date >= '2024-01-01';

Такой запрос не использует весь потенциал индекса, так как order_date не является первой колонкой.


Мета информация

Область:: ../../meta/zero/00 Базы Данных Родитель:: Индекс базы данных Источник:: Автор:: Создана:: 2024-06-16

Дополнительные материалы

Дочерние заметки