Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Por que o índice não é usado para esta consulta?


ATUALIZAÇÃO: Tente fazer a coluna col NOT NULL. Essa é a razão pela qual não está usando o índice. Quando não é nulo, aqui está o plano.
SELECT STATEMENT, GOAL = ALL_ROWS           69  10  30
                    HASH GROUP BY           69  10  30
 INDEX FAST FULL SCAN   SANDBOX TEST_INDEX  56  98072   294216

Se o otimizador determinar que é mais eficiente NÃO usar o índice (talvez devido a reescrever a consulta), não o fará. As dicas do otimizador são apenas isso, ou seja, dicas para informar ao Oracle um índice que você gostaria isso para usar. Você pode pensar neles como sugestões. Mas se o otimizador determinar que é melhor não usar o índice (novamente, como resultado da reescrita da consulta, por exemplo), ele não usará.

Consulte este link:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "A especificação de uma dessas dicas faz com que o otimizador escolha o caminho de acesso especificado somente se o caminho de acesso estiver disponível com base na existência de um índice ou cluster e nas construções sintáticas da instrução SQL. Se uma dica especificar um caminho de acesso indisponível, então o otimizador o ignora."

Como você está executando uma operação de contagem(*), o otimizador determinou que é mais eficiente apenas varrer a tabela inteira e o hash em vez de usar seu índice.

Aqui está outro link útil sobre dicas:http://www.dba-oracle.com/t_hint_ignored. htm