--- aliases: - Составные индексы tags: - maturity/🌱 date: 2024-06-16 --- Составным называется индекс, который включает в себя сразу несколько полей. Он используется для повышения производительности запросов, которые фильтруют данные по нескольким колонкам одновременно. ==В составных индексах важен порядок столбцов.== Порядок колонок в индексе влияет на его эффективность, и более [[Селективность колонки|селективные]] поля должны идти первыми, чтобы максимизировать производительность. SQL-запросы также должны следовать этому порядку для оптимального использования индекса. При поиске по составному индексу значения колонок сравниваются по порядку, что делает порядок следования колонок критически важным для эффективности запросов. > [!WARNING] Количество параметров > Составной индекс из 2-3 полей обычно считается нормальным и эффективно поддерживаемым. Если количество колонок в индексе превышает три, следует тщательно анализировать его использование, чтобы избежать излишней нагрузки на производительность. **Преимущества:** - **Оптимизация дискового пространства**: ==Один составной индекс может заменить несколько простых индексов==, что экономит дисковое пространство. - **Ускорение запросов**: Составной индекс позволяет ускорять запросы, которые используют несколько колонок для фильтрации и сортировки данных. **Недостатки:** - **Высокие накладные расходы при обновлении**: Каждый раз при вставке, обновлении или удалении данных, которые попадают в составной индекс, СУБД должна обновлять весь индекс, что может увеличивать время выполнения таких операций. - Старайтесь минимизировать использование неравенств в начале составных индексов, так как это может ограничить их применение для последующих колонок. Создание составного индекса: ```sql CREATE INDEX idx_example ON table_name (column_a, column_b); ``` Запросы, которые могут использовать этот индекс: Фильтрация по обоим полям: ```sql SELECT * FROM orders WHERE customer_id = 123 AND order_date >= '2024-01-01'; ``` Этот запрос будет максимально эффективен, так как учитывает оба поля в порядке, указанном в индексе. Фильтрация только по `customer_id`: ```sql SELECT * FROM orders WHERE customer_id = 123; ``` Этот запрос также будет использовать индекс, поскольку `customer_id` — первая колонка в составном индексе. Запрос, который не будет оптимально использовать составной индекс: ```sql SELECT * FROM orders WHERE order_date >= '2024-01-01'; ``` Такой запрос не использует весь потенциал индекса, так как `order_date` не является первой колонкой. *** ## Мета информация **Область**:: [[../../meta/zero/00 Базы Данных|00 Базы Данных]] **Родитель**:: [[Индекс базы данных]] **Источник**:: **Автор**:: **Создана**:: [[2024-06-16]] ### Дополнительные материалы - ### Дочерние заметки - [[Составной индекс в PostgreSQL]]