面试整理-数据库-索引

文章详细介绍了数据库索引的概念,强调了使用索引提高查询效率的原因。重点讨论了MySQL中B+树作为索引结构的优势,包括其解决回旋查找问题的能力。接着,对比了InnoDB的聚簇索引(主键索引)和MyIsam的非聚簇索引,解释了回表查询的现象以及如何通过创建覆盖索引来优化查询性能。
摘要由CSDN通过智能技术生成

目录

1. 什么是索引

2. 为什么要使用索引

3. mysql使用B+树做索引的优点

4. 聚簇索引(InnoDB)

5. 非聚簇索引(MyIsam)

6. 解决回表查询的方法

7. 聚簇索引和非聚簇索引数据结构


1. 什么是索引

索引是一个单独被存储在磁盘上的数据库结构,包含着对数据库表里面所有数据的引用指针,使用索引可以快速定位到数据库中的数据。

2. 为什么要使用索引

因为在查询表数据时,索引可以避免全表扫描,减少IO访问次数,提高查询效率

3. mysql使用B+树做索引的优点

Hash:虽然通过hash值查询快,但是hash无序,无法进行范围查找

平衡二叉树:左右子树的高度绝对值只差不会大于1,树越高查询越慢,范围查找有回旋查找问题

B树:一个节点可以存两个值,树的高度变矮了,查询较快,但是范围查找仍然有回旋查找的问题

B+树:

非叶子节点只存key(具体数字),非叶子节点既存key,有存value(数据的地址)

一个节点可以存两个值,树的高度比较矮

有一个单向有序链表作为叶子节点,解决了回旋查找的问题(使用索引排序的原因)

4. 聚簇索引(InnoDB)

将数据存储和索引放在一起,索引的叶子节点保存了行数据

表数据按照索引的顺序来存储的,也就是说索引项的顺序和表中记录的物理顺序一致

InnoDB中,在聚簇索引之上建立的索引称之为辅助索引,像唯一索引、符合索引、单值索引

①聚簇索引默认是主键

②如果表中没有定义主键,InnoDB会选择一个唯一非空索引代替

InnoDB索引分两种,聚簇索引(如主键索引)和辅助索引(单值索引);

聚簇索引查询出结果后,叶子节点会存储整行完整的数据;

辅助索引智慧查询出索引值和主键key值,还需要再通过主键值回表查询出整行完整数据

5. 非聚簇索引(MyIsam)

将数据和索引分来存储,表数据顺序和索引顺序无关

6. 解决回表查询的方法

通过建立联合索引实现覆盖索引,可避免回表查询

什么是覆盖索引?

如果 select 后面查询的字段都可以从这个索引的树中获取,这种情况一般可以说是用到了覆盖索引;覆盖索引一般针对的是辅助索引,整个査询结果只通过辅助索引就能拿到结果,不需要通过辅助索引树找到主键,再通过主键去主键索引树里获取其它字段值

如何实现索引覆盖?

最常见的方法就是:将被查询的字段,建立到联合索引(如果只有一个字段,普通索引也可以)里去;如以下这句sql,我在name字段建立了一个索引

SELECT id,name FROM student

原因:因为索引叶子节点存储了主键id,而name也是索引,所以查询为覆盖索引,无需回表查询

当添加一个不是索引的字段时,那么就无法从索引树上查询,必须回表查询出这个字段

SELECT id,name,age FROM student

原因:先在辅助索引树中查询出id(id和name),再通过主键id在聚簇索引树中查询整行数据,从而查询出age,此时可建立联合索引(name, age)解决回表查询的问题

7. 聚簇索引和非聚簇索引数据结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值