>  기사  >  데이터 베이스  >  小贝_mysql分区理论学习_MySQL

小贝_mysql分区理论学习_MySQL

WBOY
WBOY원래의
2016-06-01 12:59:02945검색

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函数

一般只针对某一列

 

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.