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 (comoTABLE 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 comoINDEX RANGE SCAN
seguido de la operaciónTABLE ACCESS BY INDEX ROWID
. Ver también el Capítulo 1.El llamado predicado de filtro de índice generalmente causa problemas de rendimiento para
Index Scan
. La siguiente sección explica cómo identificarlos.- Index Only Scan
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ónSort
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. Desde PostgreSQL 15 en adelante, “Run Condition” indica el final de una sentencia Top-N. Ver también “Utilizar las funciones de ventana para una paginación”.