Todos los términos del glosario

Escaneo secuencial

¿Qué es un escaneo secuencial en PostgreSQL?

Un escaneo secuencial lee todas las filas de una tabla de principio a fin. EXPLAIN lo muestra como Seq Scan; es la opción normal para tablas pequeñas o consultas que devuelven muchas filas.

Un escaneo secuencial (Seq Scan en la salida de EXPLAIN) lee todas las páginas de una tabla en orden y compara cada fila con las condiciones de la consulta. No necesita ningún índice, y es el recurso del planificador cuando no existe un índice utilizable.

Un Seq Scan no es automáticamente un problema. En tablas pequeñas, o cuando una consulta devuelve una gran parte de las filas, leer toda la tabla puede salir más barato que saltar de un lado a otro entre un índice y la tabla. Se vuelve preocupante cuando una tabla grande se lee completa para devolver unas pocas filas; un índice en la columna filtrada suele resolverlo. El planificador decide según las estadísticas de la tabla, así que ejecuta ANALYZE después de cargar muchos datos.

Ejemplo

El ejemplo carga 100 000 filas, recopila estadísticas con ANALYZE y le pregunta a EXPLAIN cómo filtraría PostgreSQL por una columna sin índice. La salida muestra Seq Scan on events.

CREATE TABLE events (id int, kind text);
INSERT INTO events
SELECT g, 'k' || (g % 10) FROM generate_series(1, 100000) AS g;
ANALYZE events;

EXPLAIN SELECT * FROM events WHERE kind = 'k3';

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).

Términos relacionados