mysql索引效率问题

为什么MySQL等主流数据库选择B+树的索引结构?
如何基于索引结构,理解常见的MySQL索引优化思路?

https://monkeysayhi.github.io/2018/03/06/浅谈MySQL的B树索引与索引优化/
https://www.cnblogs.com/lfs2640666960/p/8550452.html
https://blog.csdn.net/waeceo/article/details/78702584

数据库的索引操作不可避免需要执行IO操作,相同数据查询是如何尽量减少IO次数,线性结构直接排除(除非采用hash算法)https://www.cnblogs.com/vicenteforever/articles/1789613.html,
这是就很容易想到树形结构
关系型数据库的索引一般都是B树索引,树的高度就是一次索引的需要执行的IO次数,要想降低树的高度,树的分叉要尽可能多,也就是一次IO操作读的固定数量扇区中存的信息尽量要多,也就是子树索引要尽量多

再次强调:
不要纠结于时间复杂度,与单纯的算法不同,磁盘IO次数才是更大的影响因素。读者可以推导看看,B树与AVL的时间复杂度是相同的,但由于B树的层数少,磁盘IO次数少,实践中B树的性能要优于AVL等二叉树。

假设key、子树节点指针均占用4B,则B树节点最大m * (4 + 4) = 8m B;页面大小4KB。则m = 4 * 1024 / 8m = 512,一个512叉的B树,1000w的数据,深度最大 log(512/2)(10^7) = 3.02 ~= 4。对比二叉树如AVL的深度为log(2)(10^7) = 23.25 ~= 24,相差了5倍以上

另外,B树对局部性原理非常友好。如果key比较小(比如上面4B的自增key),则除了页表的加成,缓存还能进一步预读加速

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值