Índice parcial
¿Qué es un índice parcial en PostgreSQL?
Un índice parcial cubre solo las filas que cumplen una condición WHERE, lo que lo mantiene pequeño y rápido cuando las consultas apuntan a un subconjunto bien definido de una tabla.
Un índice parcial es un índice creado sobre un subconjunto de una tabla, definido por una condición en CREATE INDEX ... WHERE. Solo las filas que cumplen la condición tienen entradas en el índice.
Los índices parciales valen la pena cuando las consultas se centran en una pequeña parte de una tabla, como tareas sin terminar o pedidos sin pagar, mientras que la mayoría de las filas rara vez se consultan. El planificador solo puede usar el índice cuando puede demostrar que la cláusula WHERE de la consulta implica la condición del índice, así que escribe la condición de la consulta de forma que coincida con ella. Un índice único parcial también puede imponer unicidad solo dentro de ese subconjunto.
Ejemplo
El ejemplo indexa solo el 1 % de las tareas que no están terminadas. EXPLAIN muestra que la consulta de tareas abiertas usa tasks_open_idx.
CREATE TABLE tasks (id int PRIMARY KEY, done boolean NOT NULL, title text);
INSERT INTO tasks
SELECT g, g % 100 <> 0, 'task ' || g FROM generate_series(1, 100000) AS g;
CREATE INDEX tasks_open_idx ON tasks (id) WHERE NOT done;
ANALYZE tasks;
EXPLAIN SELECT id, title FROM tasks WHERE NOT done;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).