query plan optimize optimizar optimisation index improve postgresql indexing sql-execution-plan

plan - optimize query postgresql



¿Qué es un "análisis de montón de mapa de bits" en un plan de consulta? (1)

La mejor explicación viene de Tom Lane , que es el autor del algoritmo a menos que esté confundiendo. Ver también el artículo de Wikipedia .

En resumen, es un poco como un escaneo seq. La diferencia es que, en lugar de visitar cada página de disco, un índice de mapa de bits escanea ANDs y ORs indexa juntos, y solo visita las páginas de disco que necesita.

Esto es diferente de un escaneo de índice, donde el índice se visita fila por fila en orden, lo que significa que una página de disco puede ser visitada varias veces.

Re: la pregunta en tu comentario ... Sí, eso es exactamente.

Un escaneo de índice recorrerá las filas una a una, abriendo las páginas del disco una y otra vez, tantas veces como sea necesario (algunas permanecerán, por supuesto, en la memoria, pero entiendes el punto).

Una exploración de índice de mapa de bits abrirá secuencialmente una lista breve de páginas de disco, y tomará cada fila aplicable en cada una (de ahí la condición de volver a comprobar que ve en los planes de consulta).

Tenga en cuenta, como un aparte, cómo la agrupación / orden de fila afecta los costos asociados con cualquiera de los métodos. Si las filas están por todas partes en un orden aleatorio, un índice de mapa de bits será más barato. (Y, de hecho, si están realmente por todas partes, un escaneo seq será el más barato, ya que una exploración de índice de mapa de bits no está exenta de sobrecarga).

Quiero saber el principio de "Análisis de montón de mapa de bits", sé que esto sucede a menudo cuando ejecuto una consulta con OR en la condición.

¿Quién puede explicar el principio detrás de un "análisis de montón de mapa de bits"?