索引分类与查询

文章目录

索引

分类

1.按物理存储

  • 聚簇索引(主键索引)
    所有完整的用户记录都放在主键索引的B+树的叶子节点里

  • 二级索引(辅助索引)
    不是主键的索引.

补充

若在查询时使用了二级索引,在二级索引中查询的到想要的数据,不用回表,这个过程就是索引覆盖
如果查询的数据不在二级索引里,就会先检索二级索引,找到对应叶子结点,获取到主键值后,然后在检索主键索引,就可以查询到数据了,这个过程就是回表

2.按字段特性

  • 主键索引
    建立在主键上的索引被称为主键索引,一张数据表只能有一个主键索引,索引列值不允许有空值,通常在创建表时一起创建
  • 唯一索引
    建立在UNIQUE字段上的索引被称为唯一索引,一张表可以有多个唯一索引,索引列值允许为空,列值中出现多个空值不会发生重复冲突
  • 普通索引
    建立在普通字段上的索引被称为普通索引
  • 前缀索引
    对字符类型字段的前几个字符或对二进制类型字段的前几个bytes建立的索引,而不是在整个字段上建索引

3.按字段个数

  • 单列索引
    单个列组成一个索引
  • 联合索引
    多个列组成一个索引

查询

InnoDB里索引是按照B+树的方式来存储,其中,按主键大小用户记录和数据页进行排序,记录用单向链表,数据页用双向链表.

举栗子
如下图,叶子节点保存了完整的用户记录,非叶子结点是目录项记录,而根节点是目录项记录的目录
在这里插入图片描述

问题
B+树如何快速查找主键为6的记录?

过程如下

1.从根节点开始,通过二分法快速定位到符合页内包含查询值的页,因为查询的值为6,在[1,7)范围之间,所以到页30查找更详细的目录项
2.在非叶子节点(页30)中,继续通过二分法快速定位到符合页内范围包含查询值的页,主键值大于5,所以就到叶子节点(页16)查找记录
3.然后,在叶子节点(页16)中,通过查找记录时,用二分法快速定位到要查询的记录在哪个槽,再遍历槽内所有记录,找到主键为6的记录

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值