Particionamiento Físico de Tablas y Partition Pruning
Cuando una tabla de base de datos crece hasta alcanzar decenas o cientos de millones de registros (como tablas de logs, transacciones bancarias o telemetría IoT), las consultas, las reconstrucciones de índices y las tareas de mantenimiento comienzan a degradarse severamente.
El Particionamiento Físico de Tablas (Table Partitioning) es una técnica de diseño físico que divide una tabla lógica muy grande en fragmentos físicos independientes y más pequeños en disco, manteniendo una única interfaz de consulta transparente para las aplicaciones.
1. Métodos de Particionamiento Declarativo #
1┌─────────────────────────────────────────────────────────────────────────────┐ 2│ TABLA LÓGICA (VENTAS) │ 3└──────────────────────────────────────┬──────────────────────────────────────┘ 4 │ Particionamiento por Rango (Fecha) 5 ┌─────────────────────────────────┼─────────────────────────────────┐ 6 ▼ ▼ ▼ 7┌─────────────────────────┐ ┌─────────────────────────┐ ┌─────────────────────────┐ 8│ Partición 2024 (Física) │ │ Partición 2025 (Física) │ │ Partición 2026 (Física) │ 9│ [ Ficheros disco 2024 ] │ │ [ Ficheros disco 2025 ] │ │ [ Ficheros disco 2026 ] │ 10└─────────────────────────┘ └─────────────────────────┘ └─────────────────────────┘
- Particionamiento por Rango (Range Partitioning): Cada partición almacena filas cuyo valor clave cae dentro de un intervalo continuo (ej. años, meses o rangos de IDs).
- Particionamiento por Lista (List Partitioning): Cada partición almacena filas cuyos valores coinciden con una lista explícita de valores discretos (ej. código de país:
'ES', 'FR', 'IT'). - Particionamiento por Hash (Hash Partitioning): Se aplica una función hash sobre la clave para distribuir uniformemente los datos entre un número fijo de particiones físicas.
2. Ejemplos de Implementación Multi-Motor #
3. Poda de Particiones (Partition Pruning) #
La poda de particiones es la optimización automática más potente que realiza el motor:
- Al ejecutar una consulta con filtro
WHERE fecha >= '2026-01-01', el optimizador consulta los metadatos y descarta por completo escanear los ficheros físicos de 2024 y 2025. - Solo se leen los bloques de disco de la partición de 2026, reduciendo el I/O en más de un 70%.
1-- Verificar la poda de particiones con EXPLAIN 2EXPLAIN SELECT * FROM ventas WHERE fecha = '2026-05-10'; 3-- Resultado: Seq Scan on ventas_2026 (las demás particiones son ignoradas)
4. Ventajas en Operaciones de Mantenimiento #
- Borrado instantáneo de datos históricos (Data Purging):
En lugar de un costoso y bloqueanteDELETE FROM ventas WHERE fecha < '2024-01-01';que genera millones de bloqueos y logs WAL, se desacopla o elimina la partición en milisegundos:1-- PostgreSQL: Desacoplar y borrar instantáneamente sin bloquear la tabla 2ALTER TABLE ventas DETACH PARTITION ventas_2024; 3DROP TABLE ventas_2024;
Resumen del tema
Conceptos clave #
- Particionamiento Físico: división física de una tabla lógica masiva en fragmentos en disco independientes.
- Métodos principales: Rango (fechas/números), Lista (categorías/países) y Hash (distribución uniforme).
- Partition Pruning: optimización del motor que excluye de la lectura las particiones que no satisfacen la cláusula
WHERE. - Mantenimiento masivo: permite archivar o purgar terabytes de datos históricos al instante mediante operaciones DDL de partición (
DROP/DETACH) sin sobrecargar el registro de transacciones.
Qué debes recordar #
En tablas particionadas, la columna de particionamiento debe formar parte obligatoriamente de la Clave Primaria (PK) para garantizar la unicidad física entre fragmentos.