MySQL查看 InnoDB表中每个索引的高度

  我们都知道MySQL里,索引通常用B+树来实现的。B+树的叶子结点才具体保存数据(聚簇索引保存的是行数据;普通索引是主键,如有需要得回表),非叶子结点都是用来索引叶子结点的。假设索引高度为h,那么每次索引查询都要查询h个索引页面才能找到叶子结点的索引数据。所以h的大小,势必成为索引效率的一个关键。那么通常表的索引高度h是多大呢?

  我们再假设扇出系数为k,则索引里可索引key的数s=k^h。  

  在InnoDB里,每个页默认16KB,假设索引的是8B的long型数据,每个key后有个页号4B,还有6B的其他数据(参考《MySQL技术内幕:InnoDB存储引擎》P193的页面数据),那么每个页的扇出系数为16KB/(8B+4B+6B)≈1000,即每个页可以索引1000个key。在高度h=3时,s=1000^3=10亿!!也就是说,InnoDB通过三次索引页的I/O,即可索引10亿的key。通常来说,索引树的高度在2~4。当然,这也跟要索引字段的数据类型有关,如果是int或short,索引效率更好,而如果是varchar(100),那扇出系数就低了,索引效率自然要低些。所以我们在索引字段时,字段的类型越简单效率越好。

  具体如何查看索引树的高度,可参考:查看 InnoDB表中每个的索引高度

转载于:https://www.cnblogs.com/waterystone/p/6638531.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值