数据库
首页 > 数据库> > mysql数据分区

mysql数据分区

作者:互联网

1.表分区基本概念

什么是表分区?
    表分区mysql自带的数据切分技术,根据一定的规则把存放数据的文件分成了许多小块,存储在磁盘中不同区域。
    通过提升磁盘io能力,来加快查询的速度,表分区可以让mysql单表保存更多的数据,提升查询性能。
    分区不会更改数据表的机构,发生变化的只是存储方式而已,从逻辑上看就是一张表,但是底层是多个物理分区组成的。
    
        
    分区是一种表的设计模式,正确的分区可以极大地提升数据库的查询效率,完成更高质量的SQL编程。但是如果错误地使用分区,那么分区可能带来毁灭性的的结果。

    分区功能并不是在存储引擎层完成的,因此不只有InnoDB存储引擎支持分区,常见的存储引擎MyISAM、NDB等都支持分区。
    但是并不是所有的存储引擎都支持,如CSV、FEDORATED、MERGE等就不支持分区。在使用此分区功能前,应该对选择的存储引擎对分区的支持有所了解。

    MySQL数据库在5.1版本时添加了对分区的支持,分区的过程是将一个表或索引分解为多个更小、更可管理的部分。
    就访问数据库的应用而言,从逻辑上讲,只有一个表或一个索引,但是在物理上这个表或索引可能由数十个物理分区组成。
    每个分区都是独立的对象,可以独自处理,也可以作为一个更大对象的一部分进行处理。

    MySQL数据库支持的分区类型为水平分区(指将同一个表中不同行的记录分配到不同的物理文件中),并不支持垂直分区(指将同一表中不同列的记录分配到不同的物理文件中)。
    此外,MySQL数据库的分区是局部分区索引,一个分区中既存放了数据又存放了索引。
    而全局分区是指,数据存放在各个分区中,但是所有数据的索引放在一个对象中。
    目前,MySQL数据库还不支持全局分区。


表分区的优点:
    1.表分区的数据可以分布在不同的物理设备上,从而高效的利用多个硬件设备
    2.单表可以存储更多的数据
    3.表分区存储在不同的设备上,数据的写入和读取的效率提升了,汇总函数计算速度变快了
    4.不会出现表锁,只会锁住相关的分区
        
表分区的缺点:
    1.不支持存储过程,存储函数和某些特殊的函数
    2.不支持安慰运算符
    3.分区键不能使用子查询,一般使用表连接去替代子查询
    4.创建表分区后,尽量不要修改数据库模式,会让mysql丢失数据

注意:
  每张数据表只能有1024个分区

 2.表分区的切分规则

range分区
    PARTITIONED BY RANGE COLUMNS # 根据连续区间值切分数据
    
list分区
    PARTITION BY LIST COLUMNS # 根据枚举值切分,切分的字段必须是整数
    
hash分区
    PARTITION BY HASH # 对整数值求模分区数据,切分字段必须是整数(主键递增或者根据函数运算的结果是整数)

key分区
    PARTITION BY KEY # 对任何数据类型求模切分数据,字符串类型,日期类型,二进制类型都可以

子分区
    SUBPARTITION BY XXX # 

注意:
    只能按照主键字段来切分数据,如果对主键字段切分数据,那么这个表表只能不设置主键了

 

 

 

pass

标签:存储,分区,支持,切分,mysql,数据,数据库
来源: https://www.cnblogs.com/p0st/p/15962462.html