mysql分区

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分区一样,只是分区的算法不同。

©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页