Escaneo de índice
¿Qué es un escaneo de índice en PostgreSQL?
Un escaneo de índice usa un índice para encontrar las filas que coinciden y luego las obtiene de la tabla. EXPLAIN lo muestra como Index Scan; un Index Only Scan puede omitir la tabla.
En un escaneo de índice, PostgreSQL recorre un índice para encontrar las entradas que cumplen la condición de la consulta y luego lee las filas correspondientes de la tabla. Es eficiente cuando una consulta selecciona una pequeña fracción de las filas de una tabla, como una búsqueda por clave primaria.
En EXPLAIN también aparecen métodos de acceso relacionados. Un Bitmap Index Scan primero reúne las ubicaciones de todas las filas que coinciden y luego lee las páginas de la tabla en orden físico, lo que conviene para resultados de tamaño mediano. Un Index Only Scan responde la consulta solo con el índice cuando todas las columnas que necesita están en él, y omite la tabla en las páginas que el mapa de visibilidad marca como totalmente visibles.
Ejemplo
El ejemplo crea una tabla con clave primaria, que PostgreSQL respalda con un índice B-tree, y le pregunta a EXPLAIN por una búsqueda por id. La salida muestra Index Scan using orders_pkey.
CREATE TABLE orders (id int PRIMARY KEY, customer_id int, total numeric);
INSERT INTO orders
SELECT g, g % 1000, g * 1.5 FROM generate_series(1, 100000) AS g;
ANALYZE orders;
EXPLAIN SELECT * FROM orders WHERE id = 42;SQL simple para PostgreSQL 16 o 17 estándar, sin extensiones. Ejecútalo en una base de datos vacía que puedas descartar.
Fuentes
Documentación oficial de PostgreSQL (en inglés).