de Martin LE TARNEC.

Acceso selectivo y predicados de filtro


La base de datos Oracle usa tres diferentes métodos para aplicar los filtros (predicados) where:

Predicados de acceso

Los predicados de acceso expresan las condiciones de inicio y fin del recorrido del nodo hoja.

El predicado de filtro sobre índice (“filtrar” las operaciones sobre índice)

Los predicados de filtro sobre índice sólo se aplican durante el recorrido del nodo hoja. No contribuyen a las condiciones de inicio y fin y no limitan el rango escaneado.

Predicado de filtro a nivel de tabla (“filtrar” las operaciones sobre la tabla)

Los predicados sobre columnas no son parte del índice que se evalúan a nivel de tabla. Para que eso suceda, la base de datos debe cargar la fila desde la primera tabla.

Nota

Los predicados de filtro sobre índice dan una falsa impresión de seguridad; aunque se usa el índice, el rendimiento se deteriora rápidamente con un volumen de datos creciente o un sistema cargado.

Los planes de ejecución que fueron creados con la funcionalidad DBMS_XPLAN (ver Obtener un plan de ejecución), muestran el uso del índice dentro de la sección “Información de predicados” bajo el cuadro del plan de ejecución:

------------------------------------------------------
| Id | Operation         | Name       | Rows  | Cost |
------------------------------------------------------
|  0 | SELECT STATEMENT  |            |     1 | 1445 |
|  1 |  SORT AGGREGATE   |            |     1 |      |
|* 2 |   INDEX RANGE SCAN| SCALE_SLOW |  4485 | 1445 |
------------------------------------------------------

Predicate Information (identified by operation id):
   2 - access("SECTION"=:A AND "ID2"=:B)
       filter("ID2"=:B)

La numeración de la información de predicado hace referencia al identificador “Id” de la columna del plan de ejecución. Ahí, la base de datos muestra también un asterisco para señalar las operaciones que tienen una información de predicado.

Este ejemplo, tomado del Capítulo “Rendimiento y escabilidad”, muestra un INDEX RANGE SCAN que realiza predicados de acceso y de filtro. La base de datos Oracle tiene la peculiaridad de que muestra también el predicado de filtro como predicado de acceso; por ejemplo, ID2=:B en el plan de ejecución anterior.

Importante

Si una condición aparece como un predicado de filtro, es un predicado de filtro; no importa si aparece también como predicado de acceso.

Esto significa que INDEX RANGE SCAN escanea el rango entero para la condición "SECTION"=:A y aplica el filtro "ID2"=:B sobre cada fila.

Los predicados de filtro a nivel de tabla se muestran para el acceso a la tabla respectiva como TABLE ACCESS BY INDEX ROWID o TABLE ACCESS FULL.

Observe que diferentes herramientas muestran la información de predicados de manera distinta. Por ejemplo, Oracle SQL Developer muestra la información de predicado bajo la operación respectiva.

Figura A.1 Los predicados de acceso y de filtro en Oracle SQL Developer

Algunas herramientas no muestran la información de predicado en su globalidad. Recuerde que siempre se puede recurrir a DBMS_XPLAN como se explica en “Obtener un plan de ejecución”.

Acerca del autor

Foto de Markus Winand

Markus Winand enseña SQL eficiente, en casa y online. Mejora el tiempo de desarrollo utilizando SQL moderno y optimiza el tiempo de ejecución con indexación inteligente. Su libro Rendimiento SQL explicado se ha convertido en lectura obligada sobre el tema.

Adquiere tu libro en Amazon

Portada de “Rendimiento SQL explicado”: Ardilla corriendo en la hierba

La esencia del tuning de SQL en 200 páginas

Compra en Amazon
(solo en papel)

Libro y PDF también disponible en la tienda de Markus.

Contratar a Markus

La manera más rápida y fácil de beneficiarse de su extenso conocimiento y experiencia.
Aprende más »

“Use The Index, Luke” de Markus Winand se halla bajo licencia Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Unported License.
Aspectos legales | Contacto | SIN GARANTÍA | Marcas | Privacy | CC-BY-NC-ND 3.0 licencia