O Oracle processa a sua solicitação em 3 passos :
1. Parse – onde ele verificará as suas permissões e o caminho a ser traçado na execução do processo.
2. Execute – é a execução propriamente dita do processo em questão
3. Fetch – onde ele vai te devolver o resultado do processamento.
Durante o parse ele vai procurar o melhor caminho, isso quer dizer que ele vai procurar o índice que melhor satisfaça a sua consulta.
Se você colocar opções como SUBSTR, TO_CHAR, TO_DATE ou qualquer outra função nas colunas que fazem parte do índice, você elimina a possibilidade de utilizar o mesmo…
Se a mesma consulta (exatamente a mesma, inclusive na mesma máquina e mesmo usuário) demora pouco no SQLPlus e muito no Delphi, é mais provável que o gargalo esteja no fetch, pois creio que o delphi vai receber toda a informação para formata-la e depois mostrar na tela…
Há formas de “forçar” o Oracle a usar um determinado índice, mas até hoje não percebi nenhum ganho REAL, costumo conseguir maiores ganhos com a reformulação da consulta.