论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
朋友圈
看朋友圈动态,了解ToB世界。
ToB门户
了解全球最新的ToB事件
博客
Blog
排行榜
Ranklist
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
导读
Guide
相册
Album
记录
Doing
搜索
本版
文章
帖子
ToB圈子
用户
免费入驻
产品入驻
解决方案入驻
公司入驻
案例入驻
登录
·
注册
只需一步,快速开始
账号登录
立即注册
找回密码
用户名
Email
自动登录
找回密码
密码
登录
立即注册
首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
圈子
SAAS
IT评测·应用市场-qidao123.com
»
论坛
›
软件与程序人生
›
程序人生
›
玩转MySQL:你知道什么是表分区吗
玩转MySQL:你知道什么是表分区吗
羊蹓狼
论坛元老
|
2024-10-29 03:22:00
|
显示全部楼层
|
阅读模式
楼主
主题
1014
|
帖子
1014
|
积分
3042
引言
分库分表相信大家都听说过,但(partitioning)表分区这个概念却鲜为人知,MySQL在5.1版本中开始支持了表分区技能,同时在MySQL5.5中进行了优化,自从MySQL支持的绝大部分引擎都开启了表分区功能。
但到底什么是表分区技能呢?这似乎之前没怎么听说过呀,对吗?
如果你之前还没接触过表分区技能,大概只是听说但接触不深入,那就可以跟随本章携手共探鲜为人知的表分区技能!一起Let's go~
一、何谓表分区技能?
颠末之前《全解MySQL专栏》中多篇文章的熏陶,大家应该可以或许得知一个道理:MySQL中每个数据库实例的全部数据,都会放在磁盘上来存储,默认的存储位置可通过如下命令查看:
show variables like '%datadir%';
在默认的存储目次下,每个数据库实例之间都用差别的文件夹隔开,每个文件夹中存储着相应库中的全部表结构文件、表数据文件、索引数据文件等,如下:
差别存储引擎的表,其文件格式也会存在些许差异,因此你可以在其中看到很多差别的文件后缀,但不管是何种存储引擎的表,如果表中的数据量过大,都会导致相应的磁盘文件过大,因此造成数据检索时服从变低(呆板硬盘),因为每当从磁盘问找一条数据时,都需要重新遍历整个磁盘文件,毋庸置疑,其服从天然很低。
1.1、表分区的概念
原本的表文件都是以完备的情势存储在磁盘中,而表分区则是指将一张表的数据拆分成多个磁盘文件,然后放到磁盘中存储,这样做的好处在于:需要去检索一条数据时,无需对一个完备的数据文件重新到尾做扫描,而只需要对某个分区文件进行扫描,这样做可以或许在一定水平上提升性能。
同时还能打破存储容量的限制,因为无论是Windows/Linux系统,都会存储磁盘分区的概念,在Windows中会分为C、D、E...盘,而Linux则会将磁盘划分为多个分区并挂载,一个盘符/分区的存储空间是有限的,当一张表数据增长到单个磁盘区中存不下时,就会出现相关的错误信息。
而通过表分区技能,可以将一张大表的数据,拆分到差别的磁盘分区中存放,这样可以打破存储容量的限制。
做了表分区之后,表在逻辑上还是同一张,只是磁盘中会划分为多个文件存储而已,所以表分区并不会影响原有的增删改查操作。简朴来说,表分区前后的区别,就类似于数组和链表的区别:
数组:逻辑上是连续的,并且物理空间上也是连续的,每个元素都是使用相邻的空间存放。
链表:逻辑上是连续的,但物理空间上不一定连续,每个元素可以存到任何空间,相互之间用指针毗连。
而分区之前的表文件,就类似于一个数组结构,全部的表数据都会放到同一个文件中存储,在磁盘空间上来说都是连续的。而分区之后的表文件,就类似于链表结构,表数据会分开存放到差别的磁盘空间中,在磁盘上会形成多个表数据文件,各分区之间用指针地点的方式产生关联,也就是上一个分区中,会存放下一个分区的磁盘地点,以便于提供CRUD时的数据支持。
1.2、表分区带来的优势
①相较于使用单个文件存储表数据,表分区技能可以打破单个磁盘分区的容量限制。
②对于一些失效数据,如三年前的数据,可以通过快速删除分区的方式清理,服从非常高。
③可以或许在一定水平上提升磁盘IO时,检索数据的性能,毕竟只需对一小片磁盘表文件做寻道。
④支持聚合函数的并行实行,好比sum()、count()这类函数,可以分别统计各分区的数据做汇总。
⑤带来更好的数据管理性和可用性,当一个表文件受损时,不会影响其他分区文件中的表数据。
1.3、表分区的适用场景
全部基于数据库的业务大体可分为两类:
OLTP:在线事件处置惩罚,通常的C端项目都属于这类业务,负责根本的增删改查操作。
OLAP:在线分析处置惩罚,紧张负责统计分析各类数据来做汇总,如用户画像分析、报表统计等。
对于OLAP类型的业务,表分区可以很好的进步查询性能,因为一样平常做在线分析都需要返回大量的数据,在这类业务中可以按时间分区,好比一个月用户行为等数据存在一个分区中,需要对相应的时间做分析时,只需扫描对应的时间分区即可。但在OLTP业务中,中小型项目中一样平常不会产生太多的数据,也不会一次性读取某张大表的10%以上的数据返回,大部分是通过索引返回几条数据就完事了,所以对于这类业务则要公道考虑分区到底值不值得,大概到底分区有没有必要。
二、表分区的方式与类型
简朴的对表分区概念有了认知后,接着来聊一聊表分区的划分方式,表分区技能中只支持水平划分,啥叫水平划分呢?如下:
所谓的水平划分也就是指按照水平线,对某个内容进行横向切割,好比一张表的数据,假设有100条数据,将前面五十条放到一个分区中,后面五十条放入到另一个分区中,这也就是所谓的水平划分法。
表分区技能中,仅支持水平划分的方式,也就是只支持对数据表,以行作为粒度进行划分。
不过虽然只支持水平划分的模式,但分区技能也会分为多种分区类型,在MySQL数据库中统共支持range、list、hash、key、sub、columns这六种分区类型,官网先容为>>>戳我访问<<<,其中最为常用的是range分区,接着一起简朴先容一下每种分期类型的特性。
2.1、RANGE分区
range分区的含义也就是按照范围去分区,好比现在有一个整数主键,我们可以把主键作为分区键,然后实现如下分区:
-∞ ~ 100000:无穷小到十万之间的主键记录,放入第一个分区中。
100001 ~ 200000:十万零一到二十万之间的主键记录,放入到第二个分区中。
200001 ~ +∞:二十万零一到无穷大之间的主键记录,放入到第三个分区中。
不过要记住,这里是以主键作为了分区键,也就是一条数据毕竟会被放入到哪个分区中,需要依据主键的值来决定,好比主键值为12345,那与之对应的行数据会一起被放入到第一个分区中存储。
但是这种分区类型,
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
本帖子中包含更多资源
您需要
登录
才可以下载或查看,没有账号?
立即注册
x
回复
使用道具
举报
0 个回复
倒序浏览
返回列表
快速回复
高级模式
B
Color
Image
Link
Quote
Code
Smilies
您需要登录后才可以回帖
登录
or
立即注册
本版积分规则
发表回复
回帖并转播
回帖后跳转到最后一页
发新帖
回复
羊蹓狼
论坛元老
这个人很懒什么都没写!
楼主热帖
让你成为网络世界中有破坏力的人-HTTP ...
一文带你走进【内存泄漏】
dolphinscheduler单机化改造
day01-Tomcat框架分析
3. 视图-触发器-存储过程-索引 ...
使用jsch进行sftp传输时遇到的问题com. ...
基于 Sealos 的镜像构建能力,快速部署 ...
深入理解并发编程同步工具类 ...
邮件管理数据库设计--MySQL
一文搞懂static
标签云
AI
运维
CIO
存储
服务器
浏览过的版块
物联网
快速回复
返回顶部
返回列表