1. 基本概念
基本概念:把一个表,从逻辑上分成多个区域,便于存储数据。
采用分区的前提:数据量非常大。
比如一个用户表,想分成4个区域,如何分呢?
用户的id 1到1000 分到 东区
用户的id 1001到2000 分到 南区
用户的id 2001到3000 分到 西区
用户的id 大于3001的 分到 北区
2. 创建语法
create table user ( // 创建表的语句 )engine myisam charset utf8 partition by 分区类型 (分区的关键字) ( // 分区的项 );
3. 分区的类型
(1)list:条件值为一个数据列表。
通过预定义的列表的值来对数据进行分割
例子:假如你创建一个如下的一个表,该表保存有全国20家分公司的职员记录,这20家分公司的编号从1到20。而这20家分公司分布在全国4个区域,如下表所示:
职员表:id name store_id(分公司的id)
北部 1,4,5,6,17,18
南部 2,7,9,10,11,13
东部 3,12,19,20
西部 8,14,15,16
create table p_list( id int, name varchar(32), store_id int )partition by list (store_id)( partition p_north values in(1,4,5,6,17,18), partition p_east values in(2,7,9,10,11,13), partition p_south values in(3,12,19,20), partition p_west values in(8,14,15,16) );
测试是否用到了分区:
explain partitions select * from p_list where store_id=20G
注意:在使用分区时,where后面的字段必须是分区字段,才能使用到分区。
(2)Range(范围)
这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区
create table p_range( id int, name varchar(32), birthday date )partition by range (month(birthday))( partition p_1 values less than (3), partition p_2 values less than(6), partition p_3 values less than(9), partition p_4 values less than MAXVALUE );
less than 小于等于
MAXVALUE 可能的最大值
4. 分区表的限制
只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列,最大分区数目不能超过1024。
如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内。
不支持外键
不支持全文索引(fulltext)
按日期进行分区很非常适合,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多。