Разница между составными индексами и индексами INCLUDE в PostgreSQL заключается в их функциях и области применения.
Составные индексы (Composite Index) охватывают несколько колонок сразу, позволяя одновременно ускорить поиск по нескольким полям. 1 При построении составного индекса сначала сортируется первая колонка, затем вторая и так далее. 1 Составные индексы используют, когда запрос фильтрует или сортирует по нескольким колонкам. 1
Индексы INCLUDE позволяют добавить в индекс дополнительные колонки, которые не участвуют в сортировке, но могут понадобиться для SELECT. 1 INCLUDE используют, когда нужно избежать обращения к таблице, если все необходимые данные уже содержатся в индексе. 1 Колонки, указанные с помощью INCLUDE, не участвуют в условии поиска для сканирования по индексу и не учитываются при анализе ограничения уникальности или исключения, устанавливаемого индексом. 2
Таким образом, составные индексы применяют для работы с запросами, которые используют несколько колонок в WHERE или ORDER BY, а индексы INCLUDE — для ситуаций, когда нужно добавить в индекс колонки, которые не участвуют в сортировке, но могут понадобиться для SELECT.