Mysql innodb为什么使用B+Tree

Mysql innodb存储结构(B+Tree)

二叉树
缺点:数据量容易单边过长形成链表。

红黑树(本质为平衡二叉树)
缺点:虽然使用旋转方式改变了单边过长,但是数据量大时, 树高度太高不利于查询。

Hash
hash散列算法,无法很好支持范围查询

B-Tree
缺点:虽然每个节点横向扩容控制了高度为3,但是每个节点包含索引列值和行数据,导致存储量小。叶子节点之间没有指针导致范围查找必须每次从根节点查找
特点:索引列不重复

B+Tree(变种的B-Tree)
缺点:如果一行数据按照1kb,索引最多两千多万。(每个节点大下16kb,叶子节点存放了全量数据,非叶子节点冗余了索引列值,并且存储了叶子节点的位置(6B).一个bigint占8B,一个节点大概1170,因为两层所以1170*1170*16=21902400

索引和叶子都是从左往右递增

聚集索引非聚集索引
聚集索引(innodb):

如果没有主动设置主键,就会选一个不包含NULL的第一个唯一索引列作为主键列,并把它用作一个聚集索引。如果没有这样的索引就会使用行号生成一个聚集索引,把它当做主键,这个行号6bytes,自增。可以用select _rowid from table来查询。一共两个文件索引文件和表结构文件


非聚集索引(myisam):索引文件和数据文件分开存储 (索引文件叶子节点索引列对应着数据文件中数据的地址)一共三个文件 一个索引文件,一个数据文件,一个表结构文件

创建innodb表必须要有主键这是B+Tree特点。

索引类型除了BTREE(其实是B+Tree)结构还可以有hash结构,hash不适合范围查找 
BTREE结构每个叶子节点指向另一个叶子节点,所以对范围查找比较合适

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

技术分子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值