当前位置:网站首页 > 技术博客 > 正文

mysql分区表是什么意思



1)传统不分区数据库痛点

 
  

2)数据库分区处理

如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能,在物理上将这一张表对应的三个文件,分割成许多个小块,这样呢,我们查找一条数据时,就不用全部查找了,只要知道这条数据在哪一块,然后在那一块找就行了。如果表的数据太大,可能一个磁盘放不下,这个时候,我们可以把数据分配到不同的磁盘里面去。

表分区是Mysql被Oracle收购后推出的一个新特性。

为了改善大型表以及具有各种访问模式的表的可伸缩性,可管理性和提高数据库效率。

 
  

根据所使用的不同分区规则可以分成几大分区类型。

image.png

 
  

类似于按RANGE分区,区别在于LIST分区是基于列值匹配一个离散值集合中的某个值来进行选择。

 
  

以上显示,以部门号为分区依据,每个部门一个分区。

 
  

以上创建了4个分区。

类似于按HASH分区,区别在于KEY分区只支持计算一列或多列,且MySQL服务器提供其自身的哈希函数。必须有一列或多列包含整数值。

 
  

基于RANGE/LIST 类型的分区表中每个分区的再次分割。子分区可以是 HASH/KEY 等类型。

image.png

修改已有表举例:

 
  
 
  
 
  

结果如红色部分所示:

image.png

如下命令可以查看表具有哪几个分区、分区的方法、分区中数据的记录数等信息

 
  
 
  

步骤一:创建两张表: part_tab(分区表),no_part_tab(普通表)

 
  

步骤二:创建存储过程。

 
  

步骤三:执行查询速度比对

 
  

耗时:0.407s

 
  

耗时:3.716s:3.716/0.407=9.13倍。

扫描次数对比:

 
  

1)当数据量很大(过T)时,肯定不能把数据再如到内存中,这样查询一个或一定范围的item是很耗时。另外一般这情况下,历史数据或不常访问的数据占很大部分,最新或热点数据占的比例不是很大。这时可以根据有些条件进行表分区。

2)分区表的更易管理,比如删除过去某一时间的历史数据,直接执行truncate,或者狠点drop整个分区,这比detele删除效率更高

3)当数据量很大,或者将来很大的,但单块磁盘的容量不够,或者想提升IO效率的时候,可以把没分区中的子分区挂载到不同的磁盘上。

4)使用分区表可避免某些特殊的瓶颈,例如Innodb的单个索引的互斥访问..

5)单个分区表的备份很恢复会更有效率,在某些场景下

总结:可伸缩性,可管理性,提高数据库查询效率。

项目中需要动态新建、删除分区。如新闻表,按照时间维度中的月份对其分区,为了防止新闻表过大,只保留最近6个月的分区,同时预建后面3个月的分区,这个删除、预建分区的过程就是分区表的动态管理。


版权声明


相关文章:

  • 用c语言实现循环队列2025-07-24 17:01:04
  • java多线程编程实战指南核心篇2025-07-24 17:01:04
  • html框架及常用标签2025-07-24 17:01:04
  • js事件和方法2025-07-24 17:01:04
  • 什么是多目标优化问题?多目标优化方法主要有哪些?2025-07-24 17:01:04
  • sql触发器的使用及语法2025-07-24 17:01:04
  • 黑客工具app2025-07-24 17:01:04
  • c++ifstream和ofstream2025-07-24 17:01:04
  • rrt算法流程图2025-07-24 17:01:04
  • jsch pom2025-07-24 17:01:04