【数据库】数据库索引结构分析,MySQL单表最多能存放多少数据

文章讨论了MySQL中Innodb存储引擎的单表容量限制,基于数据页大小和B+树索引结构的理论,解释了为什么超过2千万数据可能需要考虑分表。同时对比了MyISAM和Hash索引的特点,强调了磁盘IO性能在决定数据库性能中的重要性。
摘要由CSDN通过智能技术生成

经常听到MySQL单表最多能存放2千万数据,多了就要考虑分表,依据是什么呢?

Innodb数据页大小 

索引与数据存放在一个文件中。本文以MySQL为例,Innodb默认数据页大小是16KB。

查询语句innodb_page_size

show global variables like "innodb_page_size";

 索引内容结构

结构图

MySQL索引的数据结构:B+树

  1. 非叶子节点不存储data,只存储索引(几余),可以放更多的索引
  2. 叶子节点包含所有索引字段
  3. 叶子节点用指针连接,提高区间访问的性能

非叶子节点

主键+页号

假如:

主键是bigint,8bit;页号是4bit,一共12bit。一页总数:15K%12bit=1280条。

再假如每行数据大小为1Kb,每个叶子节点能存放数据就是15K%1K=15条。

一层的B+树存放数据是15

二层的B+树存放数据是1280*15

三层的B+树存放数据是1280*1280*15=2400万

因为考虑到磁盘IO性能问题,当超过3次时性能会急剧下降。如果每行数据只有250bit,单页数据可存放60条,三层B+树可存放接近1亿了,访问速度一样不会慢。

MyISAM索引引擎

文件和数据文件是分离的(非聚集)

Hash索引

  1. 对索引的key进行一次hash计算就可以定位出数据存储的位置

  2. 很多时候Hash索引要比B+ 树索引更

  3. 高效仅能满足“=N',但不支持范围查询

  4. hash冲突问题

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值