mysql 表分区
本文于 338 天之前发表,文中内容可能已经过时。
简单的操作
创建一个简单的分区表
1 | CREATE TABLE `kerns_test2` ( |
对timestamp 进行分区,只能以下面这种方式分区
1 | CREATE TABLE range_timestamp ( |
重新生成分区
1 | ALTER TABLE table_name REORGANIZE PARTITION partition_names INTO (partition_definitions) |
对表创建分区
1 | ALTER TABLE `kerns_test2` PARTITION BY RANGE(days) ( |
新增一个分区
1 | alter table kerns_test2 add partition(partition p2 values less than maxvalue); |
删除一个分区表
1 | alter table kerns_test2 drop partition p1; |
查看某个分区的数据
1 | SELECT * FROM kerns_test2 PARTITION (p2); |
查看表里面每个分区的表数据
1 | SELECT PARTITION_NAME,TABLE_ROWS FROM INFORMATION_SCHEMA.PARTITIONS WHERE TABLE_NAME = 'kerns_test2'; |
清空某个分区的数据
1 | alter table kerns_test2 truncate partition p0; |
需要注意的事项。
- MySQL 8.0 目前不支持使用InnoDB 或以外的任何存储引擎对表进行分区
- 分区字段必须是整数类型或解析为整数的表达式。
- 分区字段建议设置为NOT NULL,若某行数据分区字段为null,在RANGE分区中,该行数据会划分到最小的分区里。
- MySQL分区中如果存在主键或唯一键,则分区列必须包含在其中。
- Innodb分区表不支持外键。
- 更改sql_mode模式可能影响分区表的表现。
- 分区表不影响自增列。