Sim, o benefício surge quando você deseja consultar uma parte do índice. Se você colocar os predicados usados parcialmente, o índice poderá ser usado para consultas que envolvam esses predicados, mas não todas as colunas no índice.
Além disso, a menos que você tenha outros requisitos, pode ajudar a colocar os predicados mais seletivos em primeiro lugar, pois isso pode reduzir as operações de busca por índice mais rapidamente.
No seu caso, IDX_2
não é necessariamente redundante, dependendo da natureza das consultas na tabela. No entanto, pode não ser necessário incluir todas as colunas. Se, por exemplo, você fizer muitas consultas location
e, em date
seguida, IDX_2
for útil para ajudar a resolvê-las, IDX_1
não está na ordem correta para ser útil para isso. Você pode, no entanto, achar que isso item
é redundante IDX_2
.
A partir do 9i, a Oracle introduziu um operador 'skip scan' , no qual colunas de índice à direita podem ser consultadas com mais eficiência, o que pode reduzir a necessidade de índices adicionais desse tipo.
Em um caso mais específico, se você estiver consultando item
por location
e date
e não precisa de qualquer outra coluna, em seguida, a consulta poderia ser completamente resolvidos embora o índice sem ter que ler qualquer coisa, desde a mesa. Você também pode criar índices de cobertura que tenham colunas não indexadas anexadas. Se todas as colunas necessárias puderem ser resolvidas a partir do índice de cobertura, a consulta não precisará tocar na tabela principal.
Finalmente, em resposta à sua última pergunta: se você possui um conjunto de consultas usadas regularmente, que estão consumindo muitos recursos e podem ser ajustadas usando um índice, certamente vale a pena considerar. No entanto, a manutenção de índices vem com uma sobrecarga nas inserções, portanto, você precisará trocar o desempenho da consulta pela sobrecarga que os índices colocam nas operações de inserção ou atualização.