Mysql分区
分区概述:分区功能并不是在存储引擎层完成的,因此不是只有Inoodb支持,像MyISAM和NDB等也支持,不过也有不支持的,像Memory等。
分区过程:分区的过程是把一个表或者索引分为更小,更可管理的部分,就逻辑上来讲,就只有一个表或者索引,但是在物理上这个表或者索引可能由几个物理分区组成,,一个物理分区又又几个页组成(一般来说一个区由64个连续的页组成,当然你也可以通过从参数来设置,一个页最少由两条记录组成,如果只是单纯的一条,就失去了B+树的优点了,所以至少又两条组成,当然如果涉及到一条记录太大,导致页溢出,会有其他的方法处理的,,。。。)
分区优点:
(1)分区有利于管理
(2)分区能提高查找效率
1.RANGE分区:range分区主要是针对连续空间的分区(分区的是整数)
以上将t表记录分为两个区间,一个是当id小于10的时候,存在p0区,当id小于20,存在p1区
插入了三条记录
通过table_rows可以看出p1区间有两条记录,p0区间有一条记录,range分区主要应用在具体范围类,在删除的时候可以直接删除某个区间的值,而不用用条件来删除
如,某种品牌在每一年都有对应的价格之类的,就可以按照年来进行分区,在删除某一年的时候可以通过对区间的操作来进行,分区从另一个角度来说更利于DBA管理数据
2.List分区,List分区主要是散值,而并非连续
对于MYISAM存储引擎来说,如果插入记录中有不包含在区间的值,则在该值之前的能改成功插入到表中,该值之后的则不能插入进去了,对于InnoDB存储引擎,则会把它当成一个事务,一旦出错,则回滚,一个都不会插入成功!如上,若存储引擎为Innodb则一台数据都不会插入。
3.hash分区:主要是用户自定义函数来进行分区
partition by hash(yaer(b) ) partitions 4;
是指分为4个区,若不指定,则默认为1;
2010%4 = 2(所以插入数据属于第三个分区,从0开始)
可以看到p2区间数据为1;
4key分区:和hash分区差不多只是函数基本是系统的
5.columns分区,mysql5.5后,支持按照除整数外的其他分区,比如按字符串之类的(但是很奇怪,楼主MYsql版本5.7若按字符串分区会报错,,非常不理解啊)
也可以实现多组分区