当前位置:   article > 正文

mysql表分区

mysql表分区

1,表分区简介

1.1 什么是表分区

就是将一个表按照条件分割成若干个小表(并不是物理表,而是一个分区,每个分区对应一个文件),将表从一个大的数据文件分成了若干个小的数据文件;mysql5.1后支持分区

1.2 为什么要分区

这就很简单了,提高查询速度的目的较多。还有方便管理,提高最大存储量,提高吞吐量

2,分区类型

2.1 基本分区类型

  • Range分区:最为常用,基于属于一个给定连续区间的列值,把多行分配给分区。最常见的是基于时间字段. 基于分区的列最好是整型,如果日期型的可以使用函数转换为整型。其实就是根据表的一个字段来进行分区,比如说根据年龄段来进行分区。
  1. create table t1 (id int,age int,name varcher(20),pos_date datetime)
  2. pratition by range(age)
  3. pratition p01 values less than (10),
  4. pratition p01 values less than (20),
  5. pratition p01 values less than (30),
  6. pratition p01 values less than (maxvalues)
  7. );
  • List分区:LIST分区和RANGE分区类似,区别在于LIST是枚举值列表的集合,RANGE是连续的区间值的集合。其实真的是和range类似,range是根据范围来分,list可以更具体一些,比如说根据生肖来分区(年龄是离散的)。
  1. create table t1 (id int,cidint,name varcher(20),pos_date datetime)
  2. pratition by list(cid)
  3. pratition p01 values less than (147),
  4. pratition p01 values less than (258),
  5. pratition p01 values less than (369),
  6. );
  • Hash分区:基于给定的分区个数,将数据分配到不同的分区,HASH分区只能针对整数进行HASH,对于非整形的字段只能通过表达式将其转换成整数。
  1. create table t3 (id int,age int,name varcher(20),pos_date datetime)
  2. pratition by hash(cid)
  3. pratitions 4

线性哈希:使用一个线性2的幂;有利于存储大量数据,增删合拆更快,但是分布不均匀。

语法:同上hash前面加linear

  • KEY分区和HASH分区的算法不一样,PARTITION BY HASH (expr),MOD取值的对象是expr返回的值,而PARTITION BY KEY (column_list),基于的是列的MD5值。
  1. create table t3 (id int,age int,name varcher(20),pos_date datetime)
  2. pratition by key(cid)
  3. pratitions 4
  • 多列分区:  就是允许通过多个列来定义一个分区
  1. create table t1 (a int,b int,c int)
  2. pratition by range columns(a ,b)
  3. pratition p01 values less than (10,10),
  4. pratition p01 values less than (10,20),
  5. pratition p01 values less than (10,30),
  6. pratition p01 values less than (10,maxvalues)
  7. pratition p01 values less than (maxvalues,maxvalues)
  8. );

2.2 子分区

通俗说就是子分区就是在表分区后再进行分区

  1. create table t4 (id int, udate date)
  2. partition by range(year (udate))
  3. subpartition by hash (to_days(udate))
  4. subpartitions 2
  5. (
  6. partition p01 values less than(1990),
  7. partition p01 values less than(20000),
  8. partition p01 values less than(maxvalues)
  9. );

注意:每个分区的子分区数量必须一致

2.3 分区管理

  1. 修改分区
  2. alter table t1 partition by range(age)
  3. (
  4. partition p01 values less than(10),
  5. partition p01 values less than(20),
  6. )
  7. 删除分区(包括数据)
  8. alter table t1 drop partition p02;
  9. 删除分区的数据
  10. alter table t1 truncate partition p01;
  11. 新增分区(只能从高端上加)
  12. alter table access_log add partition(
  13. partition p4 values less than (to_days('20190105'))
  14. );
  15. 拆分分区
  16. alter table access_log reorganize partition p4 into(
  17. -> partition s0 values less than(to_days('20190104')),
  18. -> partition s1 values less than(to_days('20190105'))
  19. -> );
  20. 合并分区
  21. alter table access_log reorganize partition s0,s1 into (
  22. partition p4 values less than (to_days('20190105'))
  23. );

当分区建立后,分区需持续关心。后续可能出现各种状况,可以进行相应的重建、优化、修复等操作

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/961017
推荐阅读
相关标签
  

闽ICP备14008679号