MySQL分区类型


博文大纲:MySQL分区类型如下:上面的四种分区的条件必须是整形,如果不是整形需要通过函数将其转换为整形。RANGE分区是基于属于一个给定连续区间的列值,把多行分配给分区。这些区间要连续且不能相互重叠,使用values less than操作符来进行定义。创建一个RANGE分区方式的表:按照这种分区方案,当插入的记录store_id小于6,会保存在p0这个分区,如果store_id小于11则会将数据保存在p1这个分区…..以此类推。但是在上面的分区方案中,定义的最后一个分区是小于21的,那么,如果此时有store_id大于或等于21的记录,则会插入失败,因为数据库不知道应该插入到哪个分区中,避免这种情况的发生,就需要在指定分区方案或者新增一个分区,最后一个分区指定的范围应该为maxvalue,而不是一个具体的值。根据上面创建的表,可以添加一个范围为maxvalue的分区,命令如下:如果最后一个分区指定的范围是maxvalue,那么后期想要添加分区的话,需要使用以下方式(使用类似于分区合并的指令):删除分区的指令如下(注:当分区被删除,那么分区所存储的数据也将被删除,慎用!!!):L开发云主机域名IST分区类似于RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。LIST分区通过使用“partition by list(expr)”来实现,其中“expr”是某列值或一个基于某个列值、并返回一个整数值的表达式,然后通过“values in(value_list)”的方式来定义每个分区,其中“value_list”是一个通过逗号分隔的整数列表。创建LIST分区类型举例:在上面创建的表中,如果插入一个store_id为22(不在定义的分列表中)的数据,那么将会插入失败,如下:失败的原因就是:LIST分区没有类似如“VALUES LESS THAN MAXVALUE”这样的包含其他值在内的定义。将要匹配的任何值都
必须在值列表中找到
。解决办法就是增加有这个值的分区,如下:这种模式允许DBA通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。 hash分区的目的是将数据均匀的分布到预先定义的各个分区中,保证各分区的数据量大致一致。在range和list分区中,必须明确指定一个给定的列值或列值集合应该保存在哪个分区中;而在hash分区中,MySQL自动完成这些工作,用户所要定一个列值或者表达式,以及指定被分区的表将要被分割成的分区数量。上述创建表的命令中,使用了year函数来提取b列中的年份来做分区的依据,通过partitions来指定需要4个分区。上述指令插入的数据将被存放在p2分区,计算方法如下:查看information_schema库中的partitions也可以查看到p2分区中会有1条记录,如下:返回结果如下:上面的例子并不能把数据均匀的分布到各个分区,因为按照YEAR函数进行的,该值本身是离散的。如果对连续的值进行HASH分区,如自增长的主键,则可以较好地将数据平均分布。key分区和hash分区相似,不同在于hash分区是用户自定义函数进行分区,key分区使用mysql数据库提供的函数进行分区,NDB cluster使用MD5函数来分区,对于其他存储引擎mysql使用内部的hash函数。创建一个key分区的表:如果后期需要新增分区,使用以下指令即可:上述指令是新增了5个分区,也就是说,现在t_key这个表一共有9个分区了。注: mysql-5.5开始支持COLUMNS分区,可视为RANGE和LIST分区的进化,COLUMNS分区可以直接使用非整形数据进行分区。COLUMNS分区支持以下数据类型: 所有整形,如INT SMALLINT
TINYINT BIGINT。FLOAT和DECIMAL则不支持。 日期类型,如DATE和DATETIME。其余日期类型不支持。字符串类型,如CHAR、VARCHAR、BINARY和VARBINARY。BLOB和TEXT类型不支持。 COLUMNS可以使用多个列进行分区。
先在本地创建好需要的目录:然后创建表时,指定data directory就可以,如下:查看本地目录,则会发现自动创建了相应的存放数据的目录,如下:
注:使用mysql默认的存储引擎inodb时候,只需要指定data directory 就可以,因为inodb的数据和索引在一个文件中。但是创建表格时指定engine=myisam时,修改分区的存储位置,需要同时指定data directory和index directory。———————— 本文至此结束,感谢阅读 ————————

相关推荐: MySQL优化(超完整版)(一)

  前言:    MySQL数据库的优化模块:      – 数据库的设计—三大范式      – 数据库的索引:唯一索引、主键索引、聚合索引、复合索引、默认索引      – SQL优化      – 分库分表      – 读写分离:提升IO性能     …

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

(0)
打赏 微信扫一扫 微信扫一扫
上一篇 06/06 21:21
下一篇 06/06 21:21

相关推荐