Table Partitioning Strategies: Performance
Module: Query Optimization & Performance
**Partition Pruning Impact:**
Table: 1B rows, 12 monthly partitions
Without pruning (scans all partitions):
- Reads: 1B rows
- I/O: 500GB
- Time: 5 minutes
With pruning (scans 1 partition):
- Reads: 83M rows (8%)
- I/O: 42GB (8%)
- Time: 20 seconds (15x faster)
**Index Size Reduction:**
Non-partitioned table:
- Table: 1B rows, 500GB
- Index on customer_id: 50GB
- Index scan: reads 50GB index
Partitioned table (12 partitions):
- Each partition: 83M rows, 42GB
- Index per partition: 4.2GB
- Query scans 1 partition index: 4.2GB (12x smaller)
**Parallel Operations:**
Non-partitioned:
- VACUUM: 2 hours (single-threaded)
- CREATE INDEX: 1 hour (single-threaded)
Partitioned (12 partitions):
- VACUUM: 12 partitions in parallel = 15 minutes (8x faster)
- CREATE INDEX: 12 indexes in parallel = 10 minutes (6x faster)
**Archive Performance:**
Non-partitioned:
- DELETE old data: 4 hours (scans table, deletes rows, updates indexes)
- VACUUM after DELETE: 2 hours
- Total: 6 hours
Partitioned:
- DROP old partition: 1 second (instant)
- No VACUUM needed
- Total: 1 second (21,600x faster)
**Partition Overhead:**
Planning time with many partitions:
- 10 partitions: +5ms
- 100 partitions: +50ms
- 1000 partitions: +500ms