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

¿Por qué no se utiliza el índice para esta consulta?

ACTUALIZACIÓN: Intente hacer que la columna col NO sea NULL. Esa es la razón por la que no está usando el índice. Cuando no es nulo, este es el plan.

SELECT STATEMENT, GOAL = ALL_ROWS           69  10  30
                    HASH GROUP BY           69  10  30
 INDEX FAST FULL SCAN   SANDBOX TEST_INDEX  56  98072   294216

Si el optimizador determina que es más eficiente NO usar el índice (tal vez debido a la reescritura de la consulta), entonces no lo hará. Las sugerencias del optimizador son solo eso, es decir, sugerencias para decirle a Oracle un índice que le gustaría. para usar. Puedes pensar en ellos como sugerencias. Pero si el optimizador determina que es mejor no usar el índice (nuevamente, como resultado de la reescritura de la consulta, por ejemplo), entonces no lo hará.

Consulte este enlace:http://download. oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm "La especificación de una de estas sugerencias hace que el optimizador elija la ruta de acceso especificada solo si la ruta de acceso está disponible en función de la existencia de un índice o clúster y de las construcciones sintácticas de la instrucción SQL. Si una sugerencia especifica una ruta de acceso no disponible, entonces el optimizador lo ignora".

Dado que está ejecutando una operación de conteo (*), el optimizador ha determinado que es más eficiente escanear toda la tabla y el hash en lugar de usar su índice.

Aquí hay otro enlace útil sobre sugerencias:http://www.dba-oracle.com/t_hint_ignored. htm