Conceptos básicos de índices
9 ejemplos para empezar con los índices de PostgreSQL: 6 básicos y 3 intermedios.
Busca en todas las páginas de la documentación
9 ejemplos para empezar con los índices de PostgreSQL: 6 básicos y 3 intermedios.
Tabla con miles de filas para obtener una salida EXPLAIN significativa.
# Desarrollo local con Docker (PostgreSQL 18)
docker run -d --name pg18 -e POSTGRES_PASSWORD=dev -p 5432:5432 postgres:18
psql postgres://postgres:dev@localhost:5432/postgresMétodo de acceso predeterminado para igualdad y rangos.
CREATE INDEX customers_email_idx ON app.customers (email);
EXPLAIN SELECT * FROM app.customers WHERE email = 'ada@example.com';La columna principal debe coincidir con el predicado.
CREATE INDEX orders_account_created_idx ON app.orders (account_id, created_at DESC);Cada índice se actualiza al cambiar una fila.
INSERT INTO app.customers (email) VALUES ('new@example.com');
-- actualiza customers_email_idx además de la PKImpone la unicidad y acelera la búsqueda.
CREATE UNIQUE INDEX customers_email_unique ON app.customers (lower(email));Inspección del catálogo.
SELECT indexname, indexdef
FROM pg_indexes
WHERE schemaname = 'app' AND tablename = 'customers';Tablas pequeñas o una fracción amplia de filas.
EXPLAIN ANALYZE SELECT * FROM app.customers;Evite bloqueos de escritura largos en producción.
CREATE INDEX CONCURRENTLY customers_created_idx
ON app.customers (created_at);Proyecciones amigables para index-only.
CREATE INDEX orders_cover_idx ON app.orders (account_id) INCLUDE (total);pg_stat_user_indexes.
SELECT relname, indexrelname, idx_scan, idx_tup_read
FROM pg_stat_user_indexes
WHERE schemaname = 'app'
ORDER BY idx_scan;Versiones de la pila: Esta página se escribió para PostgreSQL 18.4 (estable 18, mantenimiento 17), pgvector 0.8+, PgBouncer 1.x, Patroni 3.x y PostGIS 3.5+.
Revisado por Chris St. John·Última actualización: 16 jul 2026