Saltar al contenido
DBAExperts
PostgreSQL Rendimiento

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. 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. 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. 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. 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 $550

Esta guía es orientativa y usa comandos de referencia. En producción, adapta a tu versión y prueba en un ambiente seguro primero.