云萌主云应用官方论坛

标题: 【转载】Mysql的分区与分表(上) [打印本页]

作者: 飘在云端    时间: 2017-2-9 14:39
标题: 【转载】Mysql的分区与分表(上)
本帖最后由 飘在云端 于 2017-2-9 14:41 编辑


range分区基于一个给定的连续区间范围,早期版本range主要是基于整数的分区。在5.7版本中date datetime列也可以使用range分区,
同时在5.5以上的版本提供了基于非整形的range column分区。range分区必须的连续的且不能重叠。使用
"values less than ()" 来定义分区区间,非整形的范围值需要使用单引号,并且可以使用maxvalue作为分区的最高值。[attach]199[/attach]

LIST分区和RANGE分区非常的相似,主要区别在于LIST是枚举值列表的集合,RANGE是连续的区间值的集合。
二者在语法方面非常的相似。同样建议LIST分区列是非null列,否则插入null值如果枚举列表里面不存在null值会插入失败,
这点和其它的分区不一样,RANGE分区会将其作为最小分区值存储,HASH\KEY分为会将其转换成0存储,主要LIST分区只支持整形,
非整形字段需要通过函数转换成整形;5.5版本之后可以不需要函数转换使用LIST COLUMN分区支持非整形字段,在COLUMN分区中有详细的讲解。

[attach]200[/attach]
基于给定的分区个数,将数据分配到不同的分区,hash分区只能针对整数进行hash,
对于非整形的字段只能通过表达式将其转换成整数。表达式可以是MySQL中任意有效的函数或者表达式,
对于非整形的hash往表插入数据的过程中会多一步表达式的计算操作,所以不建议使用复杂的表达式这样会影响性能。
mysql支持两种hash分区,常规hash(hash)和线性hash(linear hash)
[attach]201[/attach]
key分区和hash分区相似,但是key分区支持除text和blob之外的所有数据类型的分区,而hash分区只支持数字分区,
key分区不允许使用用户自定义的表达式进行分区,key分区使用系统提供的hash函数进行分区。当表中存在主键或者唯一键时,
如果创建key分区时没有指定字段系统默认会首选主键列作为分区字列,如果不存在主键列会选择非空唯一键列作为分区列,
注意唯一列作为分区列唯一列不能为null。
[attach]202[/attach]





欢迎光临 云萌主云应用官方论坛 (https://www.yunmengzhu.com/) Powered by Discuz! X3.4