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

Oracle 10g - otimizar WHERE NOT NULL


O otimizador acha que a varredura completa da tabela será melhor.

Se houver apenas alguns NULL linhas, o otimizador está certo.

Se você tiver certeza absoluta de que o acesso ao índice será mais rápido (ou seja, você tem mais de 75% linhas com col1 IS NULL ), em seguida, indique sua consulta:
SELECT  /*+ INDEX (t index_name_on_col1) */
        *
FROM    mytable t
WHERE   col1 IS NOT NULL

Por que 75% ?

Porque usar INDEX SCAN recuperar valores não cobertos pelo índice implica uma junção oculta em ROWID , que custa cerca de 4 vezes mais do que a varredura de tabela.

Se o intervalo do índice incluir mais de 25% de linhas, a verificação da tabela geralmente é mais rápida.

Conforme mencionado por Tony Andrews , o fator de agrupamento é um método mais preciso para medir esse valor, mas 25% ainda é uma boa regra.