当前位置: 首页 > news >正文

mysql-分区和性能

mysql自身只支持表的横向分区。

常听到开发人员说“”对表做个分区“,然后数据的查询就会快了。这是真的吗?实际上可能跟根本感觉不到查询速度的提升,甚至会发现查询速度急剧下降。因此,在合理使用分区之前,必须了解分区的使用环境。

数据的应用分为两类:一类是OLTP(在线事务处理),如Blog、电子商务、网络游戏等;另一类是OLAP(在线分析处理),如数据仓库、数据集市。在一个实际的应用环境中,可能既有OLTP的引用,也有OLAP的应用。如网络游戏中,玩家操作的游戏数据库应用就是OLTP的,但是游戏厂商可能需要对游戏产生的日志进行分析,通过分析得到的结果来更好地服务游戏,预测玩家的行为等,而这确实OLAP的应用。

对于OLAP的应用,分区的确是可以很好地提高查询性能,因为OLAP应用太多数查询需要频繁扫描一张很大的表。假设有一张1亿行的表,其中有一个时间戳属性列。用户的查询需要从这张表中获取一年的数据,如果按照时间戳进行分区,则需要扫描响应的表即可。这可以称为分区修剪。

然而对于OLTP的应用,分表应该非常小心,在这种应用下,通常不可能会获取一张大表中10%的数据,大部分都是通过索引返回几条记录即可。而根据B+树索引的原理可知,对于一张一张大表,一般的B+树需要2~3次的磁盘IO。因此B+树可以很好地完成操作,不需要分区的帮助,并且设计不好的分区会带来验证的性能问题,甚至还会带来额外的无法避免的问题。

发现很多开发团队人为含有1000W行的表是一张非常巨大的表,所以他们往往会选择采用分区,如对主键做10个hash的分区,这样每个分区就只有100W的数据了,因此查询应该变得更快乐,如 SELECT * FROM WHERE PK=@pk 但是有没有考虑过这样一种情况: 100W和1000W行的数据本身构成的B+树的层次都是一样的,可能都是2层。那么上走主键分区的索引并不会带来性能的提高。好的,如果1000w的B+树的高度是3,100W的B+树的高度是2,那么上述按主键分区的索引可以避免1次IO,从而提高查询效率。没问题,但是这张表只有主键索引,没有任何其他的列需要查询的。如果还有类似的sql语句:SELECT * FROM TABLE WHERE KEY=@key,这时对于KEY的查询需要扫描所有的10个分区,即使每个分区的查询开销为2次IO,ze yigong xuyao 20ci IO。而杜宇原来单表的设计,对于KEY的查询只需要2~3次IO.

相关文章:

  • Java项目生成接口文档的方案
  • Linux环境上传本地文件安装mysql
  • MySQL(数据表创建)
  • 【持续集成和持续部署】
  • H5DS编辑器教程——H5页面触发动画实战指南
  • 视频网站服务器网络连接不稳定该如何解决?
  • Python大数据处理 基本的编程方法
  • 《Oracle服务进程精准管控指南:23c/11g双版本内存优化实战》 ——附自动化脚本开发全攻略
  • Linux C语言获取elf文件符号信息
  • NVIDIA cuOpt:GPU加速优化AI微服务详解
  • 红宝书第十八讲:详解JavaScript的async/await与错误处理
  • 浅谈数据结构
  • 蓝桥杯 数三角
  • 阿里OSS使用指南!
  • 论文阅读笔记——ST-4DGS,WideRange4D
  • 【day24】逻辑分析与流程梳理:电子门票核销成功率巡检
  • 【数据分享】2000—2024年我国乡镇的逐年归一化植被指数(NDVI)数据(年最大值/Shp/Excel格式)
  • FFmpeg —— 实时绘制音频波形图(附源码)
  • 服务器与客户端通讯测试
  • 2025年- G32-Lc106-133. 克隆图--java版(很抽象,没有很能理解)
  • 江苏淮安优化村级资源配置:淮安区多个空心村拟并入邻村
  • 李云泽:支持设立新的金融资产投资公司,今天即将批复一家
  • 全军军级以上单位新任纪委书记监委主任培训班结业
  • 公安部:“五一”假期全国社会大局稳定,治安秩序良好
  • 玉渊谭天丨是自保还是自残?八个恶果透视美国征收100%电影关税
  • 上海成五一国内最热门的入境游目的地,国际消费明显提升