Home  >  Article  >  Database  >  小贝_mysql分区理论学习_MySQL

小贝_mysql分区理论学习_MySQL

WBOY
WBOYOriginal
2016-06-01 12:59:02944browse

mysql分区

简要:

一、为什么需要mysql分区

二、mysql分区的类型

三、mysql分区技术对比

 

一、为什么需要mysql分区

1、首先,业务数据增大时,必然会影响数据操作。通常针对大数据,有如下优化方法:

a、大表拆小表

b、sql语句优化

2、不足:

a、sql语句优化可以通过增加索引等来调整,但是随着数据量增大时将会导致索引的维护代价增大

b、大表拆分小表可以在细分为垂直or水平分表。但是需要实现逻辑操作。即选择那张表

3、总结: 针对大数据,添加索引会导致索引文件大以及维护索引代价大,拆分表,就需要实现逻辑操作。因此,这里需要用到mysql分区。分区其实从本质上也是实现了拆分小表的做法。是基于物理层面上进行拆分成小表,无须实现逻辑操作,对用户而言是透明的。

 

二、mysql分区类型

1、range分区: 基于给定连续区间的列值,把多行分配给分区

2、list分区: 类似于按range分区,区别在于list分区是基于列值匹配一个离散值集合中的某个值来进行选择

3、hash分区: 基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算,这个函数可以包含mysql中有效的、产生非负整数值得任何表达式

4、key分区: 类似于hash分区,区别在于key分区只支持计算一列或多列,且mysql服务器提供自身的哈希函数

总结: 使用优先级 range>list>hash>key

hash一般用于测试分区

 

三、mysql分区技术对比

分区名称

优点

缺点

共性

range

适合与日期类型,支持复合分区

有限的分区

一般只针对某一列

list

适合与有固定取值的列,支持复合分区

有限的分区,插入记录在这一列的值不在list中,则数据丢失

一般只针对某一列

hash

线性hash使得增加、删除和合并分区更快捷

线性hash的数据分布不均匀,而一般hash的数据分布均匀

一般只针对某一列

key

列可以为字符串等其它非int类型

效率较之前的低,因为函数为复杂的函数如md5或sha函数

一般只针对某一列

 

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn