mysql面试题——索引相关

一:什么是索引?

索引是数据结构,你可以简单理解为“排好序的快速查找数据结构。

二:为什么使用索引?

能以更少的查询次数来找到数据

三:InnoDB中的索引类型?

InnoDB存储引擎支持两种常见的索引数据结构:B+树索引、Hash索引
数据库中的B+树索引分为聚集索引和非聚集索引。
(1)聚集索引就是按照每张表的主键构造一个B+树;B+树的叶子节点中记录着表中一行记录的所有值。只要找到这个叶子节点也就得到了这条记录的所有值。
(2)非聚簇索引的叶节点中不包含行记录的所有值。只包含索引值和主键的值。

四:InnoDB为什么使用B+树实现索引?

  1. 支持范围查询,B+树在进行范围查找时,只需要从根节点一直遍历到叶子节点,因为数据都存储在叶子节点上,而且叶子节点之间有指针连接,可以很方便地进行范围查找。
  2. 支持排序,B+树的叶子节点按照关键字顺序存储,可以快速支持排序操作
  3. 存储更多的索引数据,因为它的非叶子节点只存储索引关键字,不存储实际数据,因此可以存储更多的索引数据;
  4. 有利于磁盘预读。由于B+树的节点大小是固定的,因此可以很好地利用磁盘预读特性,一次性读取多个节点到内存中,这样可以减少IO操作次数,提高查询效率。

五:什么是回表,怎么减少回表的次数?

我们会先通过非聚簇索引查到主键的值,之后,如果我们想通过主键的值查找到完整的用户记录的话,仍然需要到聚簇索引中再查一遍,而这个过程就叫做回表。

六:介绍一下InnoDB的数据页,和B+树的关系是什么?

InnoDB的数据页是InnoDB存储引擎中用于存储数据的基本单位。它是磁盘上的一个连续区域,通常大小为16KB当然,也可以通过配置进行调整。
B+树的每个节点都对应着一个数据页,包括根节点、非叶子节点和叶子节点。B+树通过节点之间的指针连接了不同层级的数据页,从而构建了一个有序的索引结构。B+树的非叶子节点存储着主键+指向子节点(即其他数据页)的指针。B+树的叶子节点包含实际的数据行,每个数据行存储在一个数据页中。
通过这种方式,B+树提供了快速的索引查找能力,而数据页提供了实际存储和管理数据行的机制。它们相互配合,使得InnoDB能够处理大规模数据的高效访问

七:MyISAM 的索引结构是怎么样的,它存在的问题是什么?

MyISAM是采用了一种索引和数据分离的存储方式,所以在MyISAM的索引树中,叶子节点上存储的并不是数据,而是数据所在的地址。
存在的问题:在MyISAM中,根据索引查询的过程中,需要先查到数据所在的地址,然后再查询真正的数据,那么就有两次查询的过程。而在InnoDB中,如果基于聚簇索引查询,则不需要回表,因为叶子节点上就已经包含数据的内容了。

八:主键索引和唯一索引的区别?

是否可空:主键索引是不能为NULL的,而唯一索引是可以为NULL的
是否可以有多个:主键索引在一张表中只能有一个,而唯一索引在一张表中可以创建多个
是否回表:基于主键索引的查询一定不需要回表,基于唯一索引的查询,通常是需要回表的
索引结构:在InnoDB中,主键索引就是聚簇索引,而唯一索引通常是非聚簇索引
外键:主键可以被其他表引用为外键,而唯一索引是不可以的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值