sql >> Base de Datos >  >> RDS >> Oracle

Oracle 10g - optimizar DONDE NO ES NULO

El optimizador piensa que el escaneo completo de la tabla será mejor.

Si solo hay unos pocos NULL filas, el optimizador tiene razón.

Si está absolutamente seguro de que el acceso al índice será más rápido (es decir, tiene más del 75% filas con col1 IS NULL ), luego indique su consulta:

SELECT  /*+ INDEX (t index_name_on_col1) */
        *
FROM    mytable t
WHERE   col1 IS NOT NULL

¿Por qué 75%? ?

Porque usando INDEX SCAN recuperar valores no cubiertos por el índice implica una combinación oculta en ROWID , que cuesta alrededor de 4 veces más que el escaneo de la tabla.

Si el rango del índice incluye más del 25% de filas, el escaneo de la tabla suele ser más rápido.

Como lo menciona Tony Andrews , el factor de agrupación es un método más preciso para medir este valor, pero 25% sigue siendo una buena regla general.