最左前缀原则和B树索引

        假设一张表建立了一个索引index_p(column_a,column_b,column_c),这个联合索引中包含了三个字段。那么这个在哪些查询条件下会生效加快查询速度呐?这个时候,最左前缀原则就派上用场了。

        说最左前缀原则前,我们先来了解一下B树索引。说到这里,打个岔,我平时连接mysql数据喜欢用navicat这个客户端软件,简单实用,绿色版本,解压即可使用。这个软件可以连接数据库,可以建立数据库,可以建表,建索引和主键。建索引的时候,会让选择索引类型,B树索引和hash。 这两种索引有何区别?带着这种疑问,我研究了两种索引的用法和区别。了解到,B树索引是一种自平衡多叉树,一般索引都建成B树索引即可,为什么不选哈希呐?多方检索资料了解到,hash只能用于mysql的meory引擎和heap引擎中。而我们现在mysql最流行的引擎是innodb,它不支持hash索引。故一般我们说到索引都指的是B树索引。B树索引,首先是一种树型结构,树有二叉树,还有多叉树。而B树索引就是一种多叉树结构,并且树的高度最多为4。因为树每多一层,数据库查找磁盘上的数据都要多做一次io操作,故为了减少io操作提高查找效率,数据库的B树索引高度最多只能为4层。下面找个图说明一下问题:

 画的比较粗糙,能说明问题即可。就是说B树索引使用这种多叉树结构,并且每个节点存储的值是有序的,当要查找时,会比较节点值,比节点的值大,往节点的右边找,比值小,往节点左边找,这样,直到找到值。那B树索引跟最左前缀原则的关系是什么呐?比如开头建的那个联合索引index_p(column_a,column_b,column_c),使用的时候,如果查询字段使用了column_a,或者column_a,column_b,或者column_a,column_b,column_c这三种情况时候才能起作用。因为B树索引的数据结构决定了,当你使用column_a, column_c这样的组合查询条件时,因为column_b查询条件的缺乏会导致引擎来一次全表扫描,等于这个组合查询条件没起到作用。

B树索引的结构:

索引的顶层为根,它包括指向索引中下一层次的条目。下一层次为分支块,它又指向位于索引中下一层索引中下一层次的块,最底层的是叶节点,它包含指向表行的索引条目。叶块是双向关联的, 按键值升序或降序扫描索引。

未完待续。

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值