Да, выгода приходит, когда вы хотите запросить часть индекса. Если сначала поставить частично использованные предикаты, индекс можно использовать для запросов, которые включают эти предикаты, но не все столбцы в индексе.
Кроме того, если у вас нет других требований, это может помочь поставить самые селективные предикаты первыми, поскольку это может ускорить операции поиска по индексу.
В вашем случае IDX_2
это не обязательно избыточно в зависимости от характера запросов к таблице. Однако может быть необязательно включать все столбцы. Если, например, вы выполняете много запросов, location
и date
тогда IDX_2
может быть полезно помочь разрешить эти запросы, так как IDX_1
это не в том порядке, чтобы быть полезным для этого. Вы можете, однако, обнаружить, что item
это избыточно IDX_2
.
Начиная с 9i, Oracle представила оператор «пропустить сканирование», в котором конечные столбцы индекса можно запрашивать более эффективно, что может снизить потребность в дополнительных индексах такого рода.
В более конкретном случае, если вы запрашиваете item
на location
и date
и не нужны никакие другие столбцы , то запрос может быть полностью решена , хотя индекс без ничего из таблицы читать. Вы также можете создавать закрывающие индексы, к которым прикреплены неиндексированные столбцы. Если все необходимые столбцы могут быть разрешены из индекса покрытия, запрос вообще не должен касаться главной таблицы.
Наконец, в ответ на ваш последний вопрос: если у вас есть набор регулярно используемых запросов, которые используют много ресурсов и могут быть настроены с использованием индекса, то это, безусловно, стоит рассмотреть. Однако поддержание индексов сопряжено с накладными расходами на вставки, поэтому вам придется сопоставлять производительность запросов с накладными расходами, которые индексы накладывают на операции вставки или обновления.