Índice B-tree
¿Qué es un índice B-tree en PostgreSQL?
El B-tree es el tipo de índice predeterminado de PostgreSQL. Maneja comparaciones de igualdad y de rango sobre datos ordenables y puede devolver las filas ya ordenadas.
Un índice B-tree mantiene sus claves ordenadas en un árbol balanceado. CREATE INDEX crea un B-tree a menos que elijas otro tipo, y PostgreSQL también usa B-trees para las claves primarias y las restricciones de unicidad.
El planificador puede usar un B-tree para comparaciones con <, <=, =, >= y >, para BETWEEN e IN, y para IS NULL e IS NOT NULL. También puede devolver las filas en el orden del índice, lo que puede ahorrar un ordenamiento aparte para ORDER BY. Cada índice acelera algunas lecturas y agrega trabajo a cada escritura, así que indexa las columnas por las que tus consultas realmente filtran u ordenan.
Ejemplo
El ejemplo indexa una columna de marca de tiempo y le pregunta a EXPLAIN por las filas de la última hora. La salida muestra Index Scan using logs_created_at_idx.
CREATE TABLE logs (
id bigint GENERATED ALWAYS AS IDENTITY,
created_at timestamptz NOT NULL
);
INSERT INTO logs (created_at)
SELECT now() - g * interval '1 minute' FROM generate_series(1, 100000) AS g;
CREATE INDEX logs_created_at_idx ON logs (created_at);
ANALYZE logs;
EXPLAIN SELECT * FROM logs WHERE created_at > now() - interval '1 hour';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).