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

本文意在抛砖引玉,因本人能力有限,如有不对之处,还请指正

索引

  • 是什么:索引是一组按照特定规则排好序的数据所组成的数据结构
  • 为什么:快速定位数据

B+树

  特点

  • 每个节点可以有多个索引数据
  • 自平衡
  • 叶子节点组成链表
  • 非叶子节点只存放索引值

如图......

 

聚集(聚簇)索引

基本概念

  • 非叶子节点由主键值(若未指定主键,会生成一个隐藏rowId列作为主键)排序构成,叶子节点为行数据
  • 值唯一

常见问题

  1. 为什么推荐用自增ID而不是UUID
  • 自增ID因为是有序的,页分裂时影响更小,索引维护成本更低
  • UUID占用空间更大,没页能放的索引值更少,树的深度会更深,查询时每次加载进内存的数据更少,耗费的IO资源更多
  1. 聚集索引为什么一般比二级索引的效率高
  • 自增插入,页分裂时影响更小
  • 叶子节点为真实数据行

二级索引

基本概念

  • 叶子节点存的是主键值

覆盖索引

是什么:覆盖索引是一种设计上的优化,并不是物理结构。假设表t中有a,b两列,a,b为一个组合索引,像执行where a=? and b=?这种语句时,可以直接先通过索引a找到具体记录,在拿出节点中b的值进行后续比较,其实就是正常人的逻辑

为什么:在没有覆盖索引之前,每次定位到a后,需要从叶子节点拿出主键再到聚集索引上拿出对应行数据,再取出b的值进行比较。这样效率很低。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值