Ir al contenido
Zurück zu: Redis más allá del caché: Colas, sesiones y Pub/Sub
Bases de datos y Search 8 min. de lectura

Particionamiento en PostgreSQL: Consultas eficientes sobre miles de millones de filas

Cuando las tablas crecen hasta miles de millones de filas, incluso las consultas indexadas se vuelven lentas. El particionamiento de tablas es la solución, pero solo si se implementa correctamente.

devRocks Engineering · 26. febrero 2026 · Aktualisiert: 31. marzo 2026
PostgreSQL Partitioning Performance Datenbank
Particionamiento en PostgreSQL: Consultas eficientes sobre miles de millones de filas

Cuándo se necesita el Partitioning

A partir de un determinado tamaño de tabla, incluso los índices B-Tree se vuelven ineficientes. VACUUM tarda horas, los backups se convierten en un problema y las consultas acceden a volúmenes de datos innecesariamente grandes. El Partitioning divide una tabla grande en partes más pequeñas y manejables.

Estrategias de Partitioning

  • Range Partitioning: Ideal para datos de series temporales. Particione por mes o trimestre: las consultas que abarcan un período de tiempo solo escanean las particiones relevantes.
  • List Partitioning: Para datos categóricos como región, tenant o estado. Cada partición contiene filas con determinados valores.
  • Hash Partitioning: Distribución uniforme sobre un número fijo de particiones, bueno para workloads con escritura intensiva sin una clave de partición natural.

Buenas prácticas

  • Clave de partición en la consulta: Las consultas deben incluir la clave de partición en la cláusula WHERE para que el Partition Pruning sea efectivo.
  • No demasiadas particiones: Cientos de particiones ralentizan el Query Planner. Entre 12 y 36 particiones activas es un buen punto de referencia.
  • Creación automática de particiones: Utilice pg_partman para la creación y gestión automática de particiones de series temporales.
  • Índices por partición: Cada partición tiene sus propios índices, lo que mantiene el mantenimiento de índices rápido.

Resultado

En un proyecto de e-commerce, dividimos una tabla de pedidos con 2.400 millones de filas mediante Range Partitioning por mes. El tiempo promedio de consulta se redujo de 12 segundos a 80 milisegundos, un factor de 150x.

¿Preguntas sobre este tema?

Le asesoramos con gusto sobre las tecnologías y soluciones descritas en este artículo.

Contactar

Seit über 25 Jahren realisieren wir Engineering-Projekte für Mittelstand und Enterprise.

Weitere Artikel aus „Bases de datos y Search“

Preguntas frecuentes

La partición de PostgreSQL divide tablas grandes en partes más pequeñas y manejables. Se vuelve necesario cuando las tablas son tan grandes que los índices se vuelven ineficaces, VACUUM tarda mucho tiempo o las copias de seguridad se complican.
Existen tres estrategias principales: partición por rango para datos de series temporales, partición por lista para datos categóricos y partición por hash para una distribución uniforme en cargas de trabajo con muchas escrituras. La elección de la estrategia depende de la naturaleza de los datos y de los requisitos específicos de consulta.
Las mejores prácticas incluyen usar la clave de partición en la cláusula WHERE, mantener el número de particiones en un rango de 12 a 36 y utilizar herramientas como pg_partman para la creación automática de particiones. Además, cada partición debe tener sus propios índices para mantener la velocidad de mantenimiento.
La partición permite que solo se consideren las particiones de datos relevantes en las consultas, lo que mejora significativamente el rendimiento. En un ejemplo, el tiempo promedio de consulta se pudo reducir de 12 segundos a 80 milisegundos, lo que representa una mejora de 150 veces.
Crear demasiadas particiones puede ralentizar el planificador de consultas, lo que impacta negativamente en el rendimiento de las consultas. Se recomienda mantener el número de particiones activas dentro de un rango razonable para evitar pérdidas de eficiencia.

¿No encontró respuesta?

Contáctenos