mysql的水平分表和垂直分表的区别

mysql的水平分表和垂直分表的区别

2023年7月17日发(作者:)

mysql的⽔平分表和垂直分表的区别1,⽔平分割:例:QQ的登录表。假设QQ的⽤户有100亿,如果只有⼀张表,每个⽤户登录的时候都要从这100亿中查找,会很慢很慢。如果将这⼀张表分成100份,每张表有1亿条,就⼩了很多,⽐如qq0,qq99表。⽤户登录的时候,可以将⽤户的id%100,那么会得到0-99的数,查询表的时候,将表名qq跟取模的数连接起来,就构建了表名。⽐如123456789⽤户,取模的89,那么就到qq89表查询,查询的时间将会⼤⼤缩短。这就是⽔平分割。2,垂直分割:垂直分割指的是:表的记录并不多,但是字段却很长,表占⽤空间很⼤,检索表的时候需要执⾏⼤量的IO,严重降低了性能。这时需要把⼤的字段拆分到另⼀个表,并且该表与原表是⼀对⼀的关系。例如学⽣答题表tt:有如下字段:Id name 分数 题⽬ 回答其中题⽬和回答是⽐较⼤的字段,id name 分数⽐较⼩。如果我们只想查询id为8的学⽣的分数:select 分数 from tt where id = 8;虽然知识查询分数,但是题⽬和回答这两个⼤字段也是要被扫描的,很消耗性能。但是我们只关⼼分数,并不想查询题⽬和回答。这就可以使⽤垂直分割。我们可以把题⽬单独放到⼀张表中,通过id与tt表建⽴⼀对⼀的关系,同样将回答单独放到⼀张表中。这样我们插叙tt中的分数的时候就不会扫描题⽬和回答了。3,其他要点:1)存放图⽚、⽂件等⼤⽂件⽤⽂件存储。数据库只存储路径,图⽚和⽂件存放在⽂件系统,甚⾄单独存放在⼀台服务器(图床)。2)数据参数配置。最重要的参数就是内存,我们主要⽤的innodb引擎,所以下⾯两个参数调的很⼤:innodb_additional_mem_pool_size=64Minnodb_buffer_pool_size=1G对于MyISAM,需要调整key_buffer_size,当然调整参数还是要看状态,⽤show status语句可以看到当前状态,以决定该调整哪些参数。4,合理的硬件资源和操作系统如果机器的内存超过4G,那么应当采⽤64位操作系统和64位MySQL。案例:简单购物系统暂设涉及如下表:1.产品表(数据量10w,稳定)2.订单表(数据量200w,且有增长趋势)3.⽤户表 (数据量100w,且有增长趋势)以为例讲述下⽔平拆分和垂直拆分,mysql能容忍的数量级在百万静态数据可以到千万垂直拆分:解决问题:表与表之间的io竞争不解决问题:单表中数据量增长出现的压⼒⽅案:把产品表和⽤户表放到⼀个server上订单表单独放到⼀个server上⽔平拆分:解决问题:单表中数据量增长出现的压⼒不解决问题:表与表之间的io争夺⽅案:⽤户表通过性别拆分为男⽤户表和⼥⽤户表订单表通过已完成和完成中拆分为已完成订单和未完成订单产品表 未完成订单放⼀个server上已完成订单表盒男⽤户表放⼀个server上⼥⽤户表放⼀个server上

发布者:admin,转转请注明出处:http://www.yc00.com/news/1689569686a267000.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信