de Martin LE TARNEC.

Operaciones


Acceso de índice y de tabla

Seq Scan

La operación Seq Scan escanea la relación (tabla) entera tal y como se almacena en disco (como TABLE ACCESS FULL).

Index Scan

Index Scan realiza el recorrido del B-tree, lee todos los nodos hoja para encontrar todas las entradas que coincidan y recupera los datos correspondientes de la tabla. Es como INDEX RANGE SCAN seguido de la operación TABLE ACCESS BY INDEX ROWID. Ver también el Capítulo 1, “Anatomía de un índice SQL.

El llamado predicado de filtro de índice generalmente causa problemas de rendimiento para Index Scan. La siguiente sección explica cómo identificarlos.

Escaneo limitado al índice (desde PostgreSQL 9.2)

Index Only Scan realiza un recorrido B-tree y lee todos los nodos hoja para encontrar todas las entradas que coincidan. No existe acceso a la tabla porque el índice tiene todas las columnas necesarias para cumplir la sentencia (a excepción de la información de visibilidad MVCC). Ver también Escaneado limitado al índice: Evitar el acceso a la tabla.

Bitmap Index Scan / Bitmap Heap Scan / Recheck Cond

Tom Lane publicó en la lista de correo una descripción del rendimiento en PostgreSQL, muy breve y clara.

s

Un Index Scan sencillo sigue un puntero doble, uno por uno, desde el índice, y de inmediato los lee dentro de la tabla. Un escaneo bitmap recupera todos los punteros dobles desde el índice en una sola operación, ordenándolos usando una estructura de datos “bitmap” en memoria y lee los punteros de la tabla en el orden de la ubicación física.

Tom Lane

Operaciones de unión

Por lo general, las operaciones de unión procesan sólo dos tablas al mismo tiempo. En el caso de que una sentencia tenga más uniones, éstas se ejecutan de forma secuencial: primero dos tablas y después el resultado intermedio con la otra tabla. En el contexto de las uniones, el término “tabla” puede también significar “resultado intermedio”.

Nested Loops

Unir dos tablas es buscar el resultado desde una tabla y después seleccionar la otra tabla por cada fila de la primera. Ver también Nested loops.

Hash Join / Hash

La unión hash carga los registros candidatos desde un lado de la unión, dentro de la tabla hash (marcado con Hash dentro del plan), los cuales se prueban, para cada registro, contra el otro lado de la unión. Ver también Hash join.

Merge Join

Merge join (ordenado) combina dos listas ordenadas como una cremallera de pantalón. Ambos lados de la unión debe ser preordenados. Ver también Sort merge.

Ordenar y agrupar

Ordenar / Clave de ordenación

Ordena el conjunto de las columnas mencionadas en Sort Key. La operación Sort necesita grandes cantidades de memoria para materializar el resultado intermedio (sin pipeline). Ver también Indexar Order By.

GroupAggregate

Agrega un conjunto preordenado de acuerdo con la cláusula group by. La operación no pone en memoria una gran cantidad de datos (en pipeline). Ver también Indexar Group By.

HashAggregate

Usa una tabla hash temporal para agrupar los registros. La operación HashAggregate no requiere un conjunto de datos preordenado; en su lugar usa una gran cantidad de memoria para materializar el resultado intermedio (sin pipeline). De cualquier forma, la salida no está ordenada. Ver también Indexar Group By.

Sentencias Top-N

Limitación

Interrumpir las operaciones subyacentes cuando se alcanza el número de filas deseado. Ver también Seleccionar registros Top-N.

La eficiencia de la sentencia top-N depende del modo de ejecución de las operaciones subyacentes. Es muy ineficiente cuando se abortan las operaciones no pipeline como Sort.

WindowAgg

Indica el uso de las funciones de ventana. Ver también Utilizar las funciones de ventana para una paginación.

Atención

PostgreSQL no puede ejecutar las sentencias top-N en pipeline cuando se usan funciones de ventana.

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