Mysql大数据量问题与解决方案及如何给字符串加索引[图]

一、Mysql大数据量问题与解决方案
Mysql单表适合的最大数据量是多少?
我们说Mysql单表适合存储的最大数据量,自然不是说能够存储的最大数据量,如果是说能够存储的最大量,那么,如果你使用自增ID,最大就可以存储2^32或2^64条记录了,这是按自增ID的数据类型int或bigint来计算的;如果你不使用自增id,且没有id最大值的限制,如使用足够长度的随机字符串,那么能够限制单表最大数据量的就只剩磁盘空间了。显然我们不是在讨论这个问题。
影响Mysql单表的最优最大数量的一个重要因素其实是索引。
我们知道Mysql的主要存储引擎InnoDB采用B+树结构索引。(至于为什么Mysql选择b+树而不是其他数据结构来组织索引,不是本文讨论的话题,之后的文章会讲到。)那么B+树索引是如何影响Mysql单表数据量的呢?
B+树

Mysql大数据量问题与解决方案及如何给字符串加索引[图]

一棵B+树如下所示:
Mysql的B+树索引存储在磁盘上,Mysql每次读取磁盘Page的大小是16KB,为了保证每次查询的效率,需要保证每次查询访问磁盘的次数,一般设计为2-3次磁盘访问,再多性能将严重不足。MysqlB+树索引的每个节点需要存储一个指针(8Byte)和一个键值(8Byte)。因此计算16KB/(8B+8B)=1K
16KB可以存储1K个节点,3次磁盘访问(即B+树3的深度)可以存储1K_1K_1K即10亿数据。
如果查询依赖非主键索引,那么还涉及二级索引。这样数据量将更小。
拆分
分而治之——没有什么问题不能通过拆分一次来解决,不行就拆多次。
Mysql单表存储的数据量有限。一个解决大数据量存储的办法就是分库分表。说白了就是一个数据库一张表放不下那么多数据,那就分多个数据库多张表存储。
拆分可分为垂直拆分和水平拆分。
垂直拆分是按照不同的表(或者Schema)来切分到不同的数据库(主机)之上,水平拆分则是根据表中的数据的逻辑关系,将同一个表中的数据按照某种条件拆分

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值