Partitioning splits tables into segments. Queries scan only relevant partitions.
Time-based partitioning: Most common. Partition by day, month, or hour.
CREATE TABLE events
PARTITION BY DATE(event_timestamp);
-- This scans only one partition:
SELECT * FROM events
WHERE event_timestamp >= '2024-01-01'
AND event_timestamp < '2024-01-02';
Key-based partitioning: Partition by customer_id or region when queries filter on those columns.
Over-partitioning warning: Too many small partitions hurt performance. Target GB+ partitions.