MySQL 分区表实践
学习使用RANGE、LIST、HASH等分区类型管理大表数据。 · 难度:入门 · +15XP
MySQL 分区表
分区表将一张大表的数据物理拆分为多个独立的分区,每个分区可以单独管理,从而提高查询性能和维护效率。MySQL支持RANGE、LIST、HASH、KEY四种分区类型。
RANGE分区
按列值的范围进行分区,适合按日期或ID范围查询的场景。
CREATE TABLE orders (
order_id INT NOT NULL,
order_date DATE NOT NULL,
amount DECIMAL(10,2)
) 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 p_future VALUES LESS THAN MAXVALUE
);LIST分区
按离散值列表分区,适合按地区或状态分类。
CREATE TABLE employees (
emp_id INT,
dept_id INT
) PARTITION BY LIST (dept_id) (
PARTITION p_eng VALUES IN (1,3,5),
PARTITION p_sales VALUES IN (2,4,6)
);HASH分区
通过哈希函数均匀分布数据,适合没有明显范围特征的场景。
分区修剪
优化器会自动跳过不包含目标数据的分区,大幅减少扫描量。使用EXPLAIN PARTITIONS可查看哪些分区被访问。
练习提示
创建一个按年份分区的销售表,插入跨年数据,然后查询某一年份的数据并验证分区修剪效果。