mysql分区方案:Range分区(Columns Range分区)、List分区(Columns List分区)、Hash分区(Linear Hash分区)、Key分区(Linear Key分区)。
一、Range分区:
1、当表有主键/unique key时,分区字段必须包含在主键/unique key内;
2、Range分区,只有一个分区字段,分区范围必须是连续的,而不能是重叠的;
3、Range分区条件可以是一个字段,也可以是一个函数表达式,但是表达式越复杂,分区效率就越低;
4、Range分区字段(或者表达式返回值)必须是Integer类型,如果分区字段是 TIMESTAMP类型,则必须使用 UNIX_TIMESTAMP() 函数。
5、下面情况有一个为真都比较适合使用Range分区:
a、需要删除大量旧数据;b、您希望使用包含日期或时间值的列,或者包含来自其他系列的值。c、您经常运行直接依赖于用于分区表的列的查询。
二、Range分区与Columns Range分区的区别:
1、Columns Range分区只接受列分区,不接受表达式;
2、Columns Range分区可以接受一个或者多个字段分区;
3、Columns Range分区的分区字段可以是Integer、String、Date、DateTime类型。
三、List分区与Columns List分区的区别:
1、List分区只有一个分区字段,而Columns List可以有一个以上的分区字段;
2、List分区字段的类型必须是Integer类型,而Linear List分区字段类型可以是Integer、String、DATE、DATETIME类型;
3、当表有主键/unique key时,分区字段必须包含在主键/unique key内;
四、Hash分区:
1、当表有主键/unique key时,分区字段必须包含在主键/unique key内;
2、Hash分区的分区字段必须是Integer类型,或者分区表达式的返回值是Integer类型;
3、当使用函数分区时,要注意如果使用计算复杂的表达式会导致插入、更新数据的效率很低,特别是批量插入的情况;
4、hash值变化的频率越高,mysql使用该表达式进行分区的效率越好;
五、Hash分区与Range分区、List分区的区别:
1、Hash分区的特点是保证预定的分区数量之间均匀分布数据;
2、Range、List分区必须显示指定数据存放到哪个分区,而Hash分区,mysql自动帮你完成,你只需要指定分区字段(或者分区表达式)和设置分区数量就行;
六、Hash分区与Linear Hash分区的区别:
1、分区的算法不同,Hash分区使用的是hash函数算法,Linear Hash分区使用的是2的线性幂算法;
2、使用线性散列进行分区的优点是,分区的添加、删除、合并和分割速度更快,这在处理包含大量(tb)数据的表时非常有用。缺点是,与使用常规散列分区获得的分布相比,数据不太可能均匀地分布在分区之间。
七、Key分区与Hash分区的区别:
1、key分区与hash分区类似,不同之处在于Hash分区需要自己定义hash算法进行分区,而Mysql提供了默认的hash算法给key分区;
2、key只接受包含0个或多个列名的列表。用作分区键的任何列必须包含表的部分或全部主键(如果表有主键的话)。如果没有指定列名作为分区键,则使用表的主键(如果有的话);
3、key分区的分区字段不局限于Integer类型或者null值。
八、Key分区与Linear Key分区的区别:
与Hash分区和Linear Hash分区一样,只是分区的算法不同。