一,分区概念
分区允许根据指定的规则,跨文件系统分配单个表的多个部分。表的不同部分在不同的位置被存储为单独的表。
分区和分表的区别
分区:1>一张数据表 2>没有数据重复的风险 3>写入一张表 4>强制的约束限制
分表:1>多张数据表,2>重复数据的风险 3>写入多张表 4>没有同意的约束限制
MySQl支持RANGE,LIST,HASH,KEY分区类型,其中以RANGE最为常用;
Range(范围)--这种模式允许将数据划分不同范围。例如可以将一个表通过年份划分成若干个分区。
Hash(哈希)--这种模式允许通过对表的一个或多个列的Hash Key进行计算,最后通过这个Hash码不同数值对应的数据区域进行分区。例如可以建立一个对表主键分区的表。
Key(键值)--上面Hash模式的一种延伸,这里的Hash Key是MySQl系统产生的。
List(预定义列表)--这种模式允许系统通过预定义的列表的值来对数据进行分割。
Composite复合模式)--以上模式的组合使用
二、分区能做什么
1,逻辑数据分割
2,提高单一的写和读应用速度
3,提高分区范围度查询的速度
4,分割数据能够有多个不同的物理文件路径
5,高效的保存历史数据
6,一个表上的约束检查
7,不同的主从服务器分析策略,例如master按Hash分区,salve按range分区
三,分区的限制
1,只能对数据表的整型列进行分区,或者数据列可以通过分区函数转化成整型列
2,最大分区数目不能超过1024
3,如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键在内
4,不支持外键
5,不支持全文索引(fulltext)
6,按日期进行分区非常适合,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多
四,什么时候使用分区
1,海量数据表
2,历史表快速的查询,可以采用ARCHIVE+PARTITION的方式。
3,数据表索引大于服务器有效内存
4,对于大表,特别是索引远远大于服务器有效内存时,可以不用索引,此时分区效率会更有效