Tak, korzyść pojawia się, gdy chcesz wykonać zapytanie dotyczące części indeksu. Jeśli najpierw umieścisz predykaty używane w części, indeksu można użyć do zapytań, które dotyczą tych predykatów, ale nie wszystkich kolumn w indeksie.
Ponadto, chyba że masz inne wymagania, może pomóc na pierwszym miejscu postawić najbardziej selektywne predykaty, ponieważ może to skrócić operacje wyszukiwania indeksu szybciej.
W twoim przypadku IDX_2
niekoniecznie jest zbędny w zależności od charakteru zapytań na stole. Jednak może nie być konieczne dołączenie wszystkich kolumn. Jeśli, na przykład, wiele zapytań przez Ciebie zrobić location
i date
wtedy IDX_2
może być przydatne, by rozwiązać te pytania, jak IDX_1
nie jest w odpowiedniej kolejności, aby być przydatne do tego. Może się jednak okazać, że item
jest to zbędne IDX_2
.
Od wersji 9i Oracle wprowadziło operatora „przeskocz skanowanie” , w którym zapytania o kolumny indeksu końcowego można wydajniej wyszukiwać, co może zmniejszyć zapotrzebowanie na dodatkowe indeksy tego rodzaju.
W bardziej konkretnym przypadku, jeśli zapytanie odbywa się za item
pomocą location
i date
nie potrzebujesz żadnych innych kolumn, wówczas zapytanie można całkowicie rozwiązać za pomocą indeksu bez konieczności czytania czegokolwiek z tabeli. Możesz także budować indeksy obejmujące dołączone nieindeksowane kolumny. Jeśli wszystkie potrzebne kolumny można rozwiązać z indeksu obejmującego, zapytanie w ogóle nie musi dotykać głównej tabeli.
Wreszcie, w odpowiedzi na twoje ostatnie pytanie: Jeśli masz zestaw regularnie używanych zapytań, które zużywają dużo zasobów i można je dostroić za pomocą indeksu, z pewnością warto to rozważyć. Jednak utrzymanie indeksów wiąże się z narzutem na wstawki, więc trzeba będzie zmniejszyć wydajność zapytań w stosunku do narzutu, jaki indeksy nakładają na operacje wstawiania lub aktualizacji.