分区依据的字段必须是主键的一部分,分区是为了快速定位数据,因此该字段的搜索频次较高应作为强检索字段,否则依照该字段分区毫无意义
mysql为我们提供的分区方法有下列几种
一、range、list
二、hash、key
三、columns
RANGE 分区:
按照数据大小范围分区(将数据使用某种条件,分散到不同的分区中)。如下,按文章的发布时间将数据按照2018年8月、9月、10月分区存放:
create table article_range(
id int auto_increment,
title varchar(64),
content text,
created_time int, -- 发布时间到1970-1-1的毫秒数
PRIMARY KEY (id,created_time) -- 要求分区依据字段必须是主键的一部分
)charset=utf8
PARTITION BY RANGE(created_time)(
PARTITION p201808 VALUES less than (1535731199), -- select UNIX_TIMESTAMP('2018-8-31 23:59:59')
PARTITION p201809 VALUES less than (1538323199), -- 2018-9-30 23:59:59
PARTITION p201810 VALUES less than (1541001599) -- 2018-10-31 23:59:59
);
插入和查询,可以看出来这个WHERE created_time = 1535731180的查询只是去p201808分区去找<