mysql分区:

使用及说明:

  • 分区键必须作为主键的一部分,因此分区键建议与原来表id作为联合主键。
  • 如果要建唯一索引,也需要加上分区键
  • 查询条件里需包含分区键
  • 分区不要提前建太多,总数不能超过1024

1、分区的字段,必须是表上所有的唯一索引(或者主键索引)包含的字段的子集
2、range分区:分区字段必须是整型或者转换为整型,
按照字段的区间划分数据的归属,典型的就是按照时间维度的月份分区
操作步骤:
一亿条数据

0、已存在的表进行分区

注:mysql分区实现需要分区键需要与主键联合。

alter table pm_hba_port add partition(partition p19800101 values less than ('19800101'))
1、更改主键(757s)
ALTER TABLE `pm_hba_port` DROP PRIMARY KEY, ADD PRIMARY KEY (`id`, `insert_time`);
2、分27个区(2571s==42min)
ALTER TABLE pm_hba_port
PARTITION BY RANGE(TO_DAYS(insert_time))
(
PARTITION p19800101 VALUES LESS THAN (TO_DAYS('19800101')),

PARTITION p19850101 VALUES LESS THAN (TO_DAYS('19850101')),

PARTITION p19900101 VALUES LESS THAN (TO_DAYS('19900101')) ,

PARTITION p19950101 VALUES LESS THAN (TO_DAYS('19950101')) ,

 PARTITION p20000101 VALUES LESS THAN (TO_DAYS('20000101') ),

PARTITION p20050101 VALUES LESS THAN (TO_DAYS('20050101')) ,

PARTITION p20100101 VALUES LESS THAN (TO_DAYS('20100101')) ,

PARTITION p20150101 VALUES LESS THAN (TO_DAYS('20150101')) ,

PARTITION p20200101 VALUES LESS THAN (TO_DAYS('20200101')) ,

PARTITION p20250101 VALUES LESS THAN (TO_DAYS('20250101')) ,
PARTITION p20300101 VALUES LESS THAN (TO_DAYS('20300101')) ,
PARTITION p20350101 VALUES LESS THAN (TO_DAYS('20350101')) ,

PARTITION p20400101 VALUES LESS THAN (TO_DAYS('20400101')) ,

PARTITION p20450101 VALUES LESS THAN (TO_DAYS('20450101')) ,

PARTITION p20500101 VALUES LESS THAN (TO_DAYS('20500101')) ,
PARTITION p20550101 VALUES LESS THAN (TO_DAYS('20550101')) ,
PARTITION p20630101 VALUES LESS THAN (TO_DAYS('20630101')), 

PARTITION p20800101 VALUES LESS THAN (TO_DAYS('20800101')) ,

PARTITION p21000101 VALUES LESS THAN (TO_DAYS('21000101')) ,

PARTITION p21100101 VALUES LESS THAN (TO_DAYS('21100101')) ,
PARTITION p21200101 VALUES LESS THAN (TO_DAYS('21200101')) ,
PARTITION p21300101 VALUES LESS THAN (TO_DAYS('21300101')), 

PARTITION p21400101 VALUES LESS THAN (TO_DAYS('21400101')) ,

PARTITION p21500101 VALUES LESS THAN (TO_DAYS('21500101')) ,

PARTITION p21600101 VALUES LESS THAN (TO_DAYS('21600101')) ,
PARTITION p21700101 VALUES LESS THAN (TO_DAYS('21700101')) ,
PARTITION p21770101 VALUES LESS THAN (TO_DAYS('21770101'))
);
3.分区清理
alter table pm_hba_port  truncate partition p21600101;

4.分区删除
alter table pm_hba_port  drop partition p21600101;

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐