Lab 04: Table Partitioning
Overview
Step 1: MySQL RANGE Partitioning by Year
docker run -d --name mysql-lab -e MYSQL_ROOT_PASSWORD=rootpass mysql:8.0
for i in $(seq 1 30); do docker exec mysql-lab mysql -uroot -prootpass -e "SELECT 1" 2>/dev/null && break || sleep 2; done
docker exec mysql-lab mysql -uroot -prootpass <<'EOF'
CREATE DATABASE partdb;
USE partdb;
-- Range partition by order year
CREATE TABLE orders (
id INT NOT NULL AUTO_INCREMENT,
customer VARCHAR(100),
amount DECIMAL(10,2),
order_date DATE NOT NULL,
PRIMARY KEY (id, order_date) -- partition key must be in PK
)
PARTITION BY RANGE (YEAR(order_date)) (
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p2022 VALUES LESS THAN (2023),
PARTITION p2023 VALUES LESS THAN (2024),
PARTITION p2024 VALUES LESS THAN (2025),
PARTITION p_future VALUES LESS THAN MAXVALUE
);
-- Verify partition structure
SELECT
PARTITION_NAME,
PARTITION_ORDINAL_POSITION,
PARTITION_EXPRESSION,
PARTITION_DESCRIPTION,
TABLE_ROWS
FROM information_schema.PARTITIONS
WHERE TABLE_NAME = 'orders' AND TABLE_SCHEMA = 'partdb';
EOFStep 2: Insert Data and Observe Partition Distribution
Step 3: Partition Pruning with EXPLAIN
Step 4: LIST and HASH Partitioning
Step 5: Partition Maintenance — ADD, DROP, REORGANIZE
Step 6: PostgreSQL Declarative Partitioning
Step 7: PostgreSQL Partition Pruning with EXPLAIN
Step 8: Capstone — Hash Partition + Attach/Detach Pattern
Summary
Partition Type
Use Case
Key Syntax
Key Takeaways
Last updated
