Saltar al contenido principal
PostgreSQL
20 min de lectura

Índices

Optimización de consultas con índices

Los índices mejoran la velocidad de las consultas al permitir búsquedas más rápidas.

Tipos de índices

#

B-tree (por defecto)

sql
1CREATE INDEX idx_usuarios_email ON usuarios(email);

#

Hash

sql
1CREATE INDEX idx_usuarios_id_hash ON usuarios USING HASH (id);

#

GiST

sql
1CREATE INDEX idx_datos_geo ON ubicaciones USING GIST (coordenadas);

#

GIN (para JSONB y arrays)

sql
1CREATE INDEX idx_datos_json ON usuarios USING GIN (metadata);

Índices compuestos

sql
1CREATE INDEX idx_ordenes_usuario_fecha 2ON ordenes(usuario_id, fecha DESC);

Índices parciales

sql
1CREATE INDEX idx_usuarios_activos 2ON usuarios(email) 3WHERE activo = true;

Analizar uso de índices

sql
1-- Ver índices de una tabla2SELECT * FROM pg_indexes WHERE tablename = 'usuarios';3 4-- Ver uso de índices5SELECT schemaname, tablename, indexname, idx_scan6FROM pg_stat_user_indexes7ORDER BY idx_scan;

Sintaxis

Sintaxis
sql
1CREATE [UNIQUE] INDEX nombre_idx ON tabla (columna1, columna2);

Ejemplos

Crear índice

Índice en email de usuarios

Ejemplo
sql
1CREATE UNIQUE INDEX idx_usuarios_email ON usuarios(email);2 3-- Verificar plan de consulta4EXPLAIN ANALYZE5SELECT * FROM usuarios WHERE email = 'ana@email.com';

Resultado:

CREATE INDEX
                              QUERY PLAN
-------------------------------------------------------------------
Index Scan using idx_usuarios_email on usuarios  (cost=0.15..8.17 rows=1 width=36)
  Index Cond: (email = 'ana@email.com'::text)
  Planning Time: 0.123 ms
  Execution Time: 0.045 ms