MySQL分区表实战
掌握MySQL分区表的创建、管理与查询优化技术。 · 难度:入门 · +15XP
什么是分区表?
分区表是将一个大表按照某种规则拆分成多个物理子表,但在逻辑上仍是一个整体。分区可以提高查询性能、简化数据管理和提升维护效率。
分区类型
| 类型 | 说明 |
|---|---|
| RANGE分区 | 基于列值的范围分区 |
| LIST分区 | 基于列值的列表分区 |
| HASH分区 | 基于哈希函数的分区 |
| KEY分区 | 类似HASH,但使用MySQL内置函数 |
创建RANGE分区表
CREATE TABLE orders (
order_id INT NOT NULL,
order_date DATE NOT NULL,
amount DECIMAL(10,2)
) PARTITION BY RANGE (YEAR(order_date)) (
PARTITION p2019 VALUES LESS THAN (2020),
PARTITION p2020 VALUES LESS THAN (2021),
PARTITION p2021 VALUES LESS THAN (2022),
PARTITION p_future VALUES LESS THAN MAXVALUE
);查询分区信息
-- 查看分区信息
SELECT * FROM INFORMATION_SCHEMA.PARTITIONS
WHERE TABLE_NAME = 'orders';
-- 查看分区数据分布
EXPLAIN SELECT * FROM orders WHERE order_date = '2020-06-15';
管理分区
-- 添加分区
ALTER TABLE orders ADD PARTITION (
PARTITION p2022 VALUES LESS THAN (2023)
);
-- 删除分区
ALTER TABLE orders TRUNCATE PARTITION p2019;
-- 合并分区
ALTER TABLE orders REORGANIZE PARTITION p2020,p2021 INTO (
PARTITION p2020_2021 VALUES LESS THAN (2022)
);
练习提示:创建一个按年份分区的销售表,插入跨年数据并测试分区裁剪效果。