mysql innodb(联合索引,二级索引,覆盖索引)解析

本文意在抛砖引玉,因本人能力有限,如有不对之处,还请指正
索引
是什么:索引是一组按照特定规则排好序的数据所组成的数据结构
为什么:快速定位数据
B+树
  特点
每个节点可以有多个索引数据
自平衡
叶子节点组成链表
非叶子节点只存放索引值
如图......

 

聚集(聚簇)索引
基本概念
非叶子节点由主键值(若未指定主键,会生成一个隐藏rowId列作为主键)排序构成,叶子节点为行数据
值唯一
常见问题
为什么推荐用自增ID而不是UUID
自增ID因为是有序的,页分裂时影响更小,索引维护成本更低
UUID占用空间更大,没页能放的索引值更少,树的深度会更深,查询时每次加载进内存的数据更少,耗费的IO资源更多
聚集索引为什么一般比二级索引的效率高
自增插入,页分裂时影响更小
叶子节点为真实数据行
二级索引
基本概念
叶子节点存的是主键值
覆盖索引
是什么:覆盖索引是一种设计上的优化,并不是物理结构。假设表t中有a,b两列,a,b为一个组合索引,像执行where a=? and b=?这种语句时,可以直接先通过索引a找到具体记录,在拿出节点中b的值进行后续比较,其实就是正常人的逻辑

为什么:在没有覆盖索引之前,每次定位到a后,需要从叶子节点拿出主键再到聚集索引上拿出对应行数据,再取出b的值进行比较。这样效率很低。
————————————————
版权声明:本文为CSDN博主「迟早会秃的小伙子」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/scientificCommunity/article/details/103871090

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值