mysql索引总结

索引的本质

索引是为了高效获取数据排好序的数据结构

索引的目的

如果没有索引,那么你是通过全表查询查找数据的,因为数据分散在磁盘的各个地方,所以会没有顺序的查很多次,而且每次查询都是一次磁盘IO交互,可想而知数据越来越多,查询速度会越来越慢。
如图所示,通过排好序的数据结构,获取数据会更高效。
当然索引底层并不是二叉树,这里只是大致做个形象的对比。为什么数据结构不用二叉树呢?因为二叉树在index一直递增的情况下,由于后面一个总是比前面的大,数据是单边查询的,效率也不高。
在这里插入图片描述

mysql索引采用的B+树

如上所述,二叉树容易单边递增,所以需要使用平衡树,但是平衡树的深度依旧太深,影响效率。所以我们改用B树的优化版本:B+树,B+树相比B树,为了放更多的索引index,它的非叶节点不存放data(存放的磁盘地址),转而放在叶节点。
在这里插入图片描述
如图,中间是冗余索引,最下面叶节点用指针连接,提高区间访问性能,最大能放2000万左右的索引元素。所以即使你是一张两千万数据的表,你也可以用B+树的数据结构建好索引,然后你再查询数据,效率就会很高。并且根节点往往是长期放在内存中,冗余索引则是放在缓存中。

InnoDB存储引擎主键索引

1、它的Index与data都在叶节点,这种类型的也被成为聚集索引。
2、InnoDB表必须要有主键,如果没有创建,mysql也会选择没有重复的列作为主键(从左到右的顺序),如果都是重复的列,也会生成一个rowId作为主键。
3、推荐使用整型的自增主键,因为String类型的比较影响效率,如果不是自增主键,那么Index中间插入,会导致节点分裂和重新平衡,影响效率。

在这里插入图片描述

联合索引

最经典的就是要符合最左前缀原则,如图,如果sql的where条件后面没有第一个字段,那么第一个字段就没有过滤,相当于全表查询,自然就没有走索引了。
在这里插入图片描述
附:数据结构互动学习网站

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值