Cómo crear un índice en PostgreSQL: B-tree e índices parciales
Un índice bien elegido convierte un escaneo secuencial en una búsqueda directa. El B-tree cubre la mayoría de los casos; el índice parcial reduce tamaño cuando solo consultas un subconjunto de filas.
- 1
Crea un índice B-tree estándar
Es el índice por defecto y sirve para igualdad y rangos (=, <, >, BETWEEN, ORDER BY). Cúbrelo sobre la columna que aparece en el WHERE.
CREATE INDEX idx_pedidos_cliente ON pedidos (cliente_id); - 2
Crea el índice sin bloquear escrituras
CREATE INDEX bloquea escrituras en la tabla. En producción usa CONCURRENTLY para evitarlo; tarda más pero no detiene la aplicación.
CREATE INDEX CONCURRENTLY idx_pedidos_cliente ON pedidos (cliente_id); - 3
Usa un índice parcial para subconjuntos frecuentes
Si casi siempre consultas filas con una condición fija (por ejemplo pedidos activos), un índice parcial ocupa menos y se mantiene más rápido.
CREATE INDEX idx_pedidos_activos ON pedidos (cliente_id) WHERE estado = 'activo'; - 4
Confirma que la consulta usa el índice
Revisa el plan con EXPLAIN. Si ves Index Scan en lugar de Seq Scan, el índice está funcionando para esa consulta.
EXPLAIN SELECT * FROM pedidos WHERE cliente_id = 42;
// el error común
Crear índices de más también cuesta: cada índice ralentiza los INSERT/UPDATE y ocupa disco. Un índice sobre una columna con poca selectividad (pocos valores distintos) muchas veces ni se usa.
// cuándo conviene un experto
Cuando la base es grande y las consultas ya afectan a usuarios, elegir el índice equivocado empeora las escrituras sin arreglar las lecturas. En dba.mx analizamos los planes reales y afinamos el conjunto de índices con base en la carga, no a ciegas.
Agenda un Escaneo — desde USD $550Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.