de Martin LE TARNEC.

Distinguir los predicados de acceso y de filtro


Ninguna otra base de datos provee mejor información a cerca del modo de evaluación de los predicados que DB2 porque dice dentro del plan de ejecución si se utiliza un predicado como condición de inicio y/o de fin para IXSCAN o simplemente un predicado de filtro. Sin embargo, es algo confusa porque usa una definición antigua del término “sarg”.

En los primeros tiempos, los investigadores de IBM denominaron a este tipo de condiciones de búsqueda “predicados sargable” porque SARG es la contracción de Search ARGument (en español, argumento de búsqueda). En días posteriores, Microsoft y Sybase volvieron a definir “sargable” con la “posibilidad de hacer la búsqueda a través del índice”.

Optimización del rendimiento SQL

Pero ambas definiciones son prácticamente inútiles y omito el término en mis libros y artículos. Sin embargo, los predicados de filtro dentro de los planes de ejecución DB2 se etiquetan SARG; se tiene que exponer de forma explícita que DB2 usa la definición “original” como se ha indicado con anterioridad. Por supuesto, está respaldado por la documentación:

  • Los predicados de índice sargable no se emplean para una búsqueda sino que se evalúa desde el índice si se escoge uno, porque las columnas involucradas dentro del predicado son parte de la clave del índice.

  • Los datos sargable de los predicados requieren el acceso de las filas individuales desde la tabla original. Si es necesario, DMS devolverá las columnas necesarias para evaluar el predicado, como cualquier otro para satisfacer las columnas dentro de la lista del SELECT que no podrían obtenerse desde el índice.

Predicados usados por las sentencias, documentación DB2 LUW 10.5 

Eso significa que, por lo general, los predicados DB2 etiquetados SARG son solamente predicados de filtro; tanto a nivel de índice como de tabla.

La parte muy interesante de la información de los predicados mostrados en los planes de ejecución DB2 es que no solamente etiquetan los predicados de acceso sino que muestran de manera explícita las condiciones de los predicados usadas con START y/o STOP.

El siguiente ejemplo muestra todos los tipos de predicados como se ha visto en la vista last_explained:

Explain Plan
--------------------------------------------------------------
ID | Operation           |                        Rows |  Cost
 1 | RETURN              |                             | 23550
 2 |  GRPBY (COMPLETE)   |        1 of 96480 (   .00%) | 23550
 3 |   IXSCAN SCALE_SLOW | 96480 of 60299800 (   .16%) | 23544

Predicate Information
 3 - START (Q1.SECTION = ?)
      STOP (Q1.SECTION = ?)
      SARG (Q1.ID2 = ?)

Explain plan by Markus Winand - NO WARRANTY
http://use-the-index-luke.com/s/last_explained

El rango escaneado del índice puede determinarse con facilidad desde la salida y se determina sólo por los predicados START y STOP (en este caso, son los mismos). El tercer predicado sobre la columna ID2 se etiqueta SARG y es sólo un predicado de filtro.

Mientras los predicados SARG pueden aparecer en otras operaciones (por ejemplo TBSCAN), START y STOP son exclusivos para IXSCAN. La ausencia de START o STOP indica una búsqueda con sólo un límite inferior o superior (por ejemplo, WHERE x > ?). Si ni START ni STOP aparecen para IXSCAN, eso significa que se lee el índice entero.

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