1、首先,业务数据增大时,必然会影响数据操作。通常针对大数据,有如下优化方法:
a、大表拆小表
b、sql语句优化
2、不足:
a、sql语句优化可以通过增加索引等来调整,但是随着数据量增大时将会导致索引的维护代价增大
b、大表拆分小表可以在细分为垂直or水平分表。但是需要实现逻辑操作。即选择那张表
3、总结: 针对大数据,添加索引会导致索引文件大以及维护索引代价大,拆分表,就需要实现逻辑操作。因此,这里需要用到mysql分区。分区其实从本质上也是实现了拆分小表的做法。是基于物理层面上进行拆分成小表,无须实现逻辑操作,对用户而言是透明的。
1、range分区: 基于给定连续区间的列值,把多行分配给分区
2、list分区: 类似于按range分区,区别在于list分区是基于列值匹配一个离散值集合中的某个值来进行选择
3、hash分区: 基于用户定义的表达式的返回值来进行选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算,这个函数可以包含mysql中有效的、产生非负整数值得任何表达式
4、key分区: 类似于hash分区,区别在于key分区只支持计算一列或多列,且mysql服务器提供自身的哈希函数
总结: 使用优先级 range>list>hash>key
hash一般用于测试分区
分区名称 |
优点 |
缺点 |
共性 |
range |
适合与日期类型,支持复合分区 |
有限的分区 |
一般只针对某一列 |
list |
适合与有固定取值的列,支持复合分区 |
有限的分区,插入记录在这一列的值不在list中,则数据丢失 |
一般只针对某一列 |
hash |
线性hash使得增加、删除和合并分区更快捷 |
线性hash的数据分布不均匀,而一般hash的数据分布均匀 |
一般只针对某一列 |
key |
列可以为字符串等其它非int类型 |
效率较之前的低,因为函数为复杂的函数如md5或sha函数 |
一般只针对某一列 |