de Martin LE TARNEC.

Operaciones


Acceso de índice y de tabla

Seq Scan

La operación Seq Scan escanea la relación (tabla) entera como se almacena en el 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 coinciden y recupera los datos correspondientes de la tabla. Es como INDEX RANGE SCAN seguido por la operación TABLE ACCESS BY INDEX ROWID. Ver también el Capítulo 1, “Anatomía de un índice SQL.

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

Escaneo solo del í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 coinciden. No existe acceso a la tabla porque el índice tiene todas las columnas 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ó una lista de correo sobre el rendimiento en PostgreSQL, muy clara y breve.

s

Un Index Scan sencillo recupera 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 solo dos tablas al mismo tiempo. En caso de que una sentencia tenga más uniones, 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 el 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 cada registro contra el otro lado de la unión. Ver también el Hash join.

Merge Join

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

Ordenar y agrupar

Ordenar / Clave de ordenamiento

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 la grande cantidad de datos (en pipeline). Ver también el 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 el Indexar Group By.

Sentencias Top-N

Limitación

Interrumpir las operaciones subyacentes cuando se alcanza el número de filas deseado. Ver también el 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 el 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 eficientemente SQL, en casa y online. Minimiza el tiempo de desarrollo utilizando moderno SQL y optimiza el tiempo de ejecución con indexación inteligente. Para ello también ha publicado el libro SQL Performance Explained.

“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