一:什么是索引?
索引是数据结构,你可以简单理解为“排好序的快速查找数据结构。
二:为什么使用索引?
能以更少的查询次数来找到数据
三:InnoDB中的索引类型?
InnoDB存储引擎支持两种常见的索引数据结构:B+树索引、Hash索引
数据库中的B+树索引分为聚集索引和非聚集索引。
(1)聚集索引就是按照每张表的主键构造一个B+树;B+树的叶子节点中记录着表中一行记录的所有值。只要找到这个叶子节点也就得到了这条记录的所有值。
(2)非聚簇索引的叶节点中不包含行记录的所有值。只包含索引值和主键的值。
四:InnoDB为什么使用B+树实现索引?
- 支持范围查询,B+树在进行范围查找时,只需要从根节点一直遍历到叶子节点,因为数据都存储在叶子节点上,而且叶子节点之间有指针连接,可以很方便地进行范围查找。
- 支持排序,B+树的叶子节点按照关键字顺序存储,可以快速支持排序操作
- 存储更多的索引数据,因为它的非叶子节点只存储索引关键字,不存储实际数据,因此可以存储更多的索引数据;
- 有利于磁盘预读。由于B+树的节点大小是固定的,因此可以很好地利用磁盘预读特性,一次性读取多个节点到内存中,这样可以减少IO操作次数,提高查询效率。
五:什么是回表,怎么减少回表的次数?
我们会先通过非聚簇索引查到主键的值,之后,如果我们想通过主键的值查找到完整的用户记录的话,仍然需要到聚簇索引中再查一遍,而这个过程就叫做回表。
六:介绍一下InnoDB的数据页,和B+树的关系是什么?
InnoDB的数据页是InnoDB存储引擎中用于存储数据的基本单位。它是磁盘上的一个连续区域,通常大小为16KB当然,也可以通过配置进行调整。
B+树的每个节点都对应着一个数据页,包括根节点、非叶子节点和叶子节点。B+树通过节点之间的指针连接了不同层级的数据页,从而构建了一个有序的索引结构。B+树的非叶子节点存储着主键+指向子节点(即其他数据页)的指针。B+树的叶子节点包含实际的数据行,每个数据行存储在一个数据页中。
通过这种方式,B+树提供了快速的索引查找能力,而数据页提供了实际存储和管理数据行的机制。它们相互配合,使得InnoDB能够处理大规模数据的高效访问
七:MyISAM 的索引结构是怎么样的,它存在的问题是什么?
MyISAM是采用了一种索引和数据分离的存储方式,所以在MyISAM的索引树中,叶子节点上存储的并不是数据,而是数据所在的地址。
存在的问题:在MyISAM中,根据索引查询的过程中,需要先查到数据所在的地址,然后再查询真正的数据,那么就有两次查询的过程。而在InnoDB中,如果基于聚簇索引查询,则不需要回表,因为叶子节点上就已经包含数据的内容了。
八:主键索引和唯一索引的区别?
是否可空:主键索引是不能为NULL的,而唯一索引是可以为NULL的
是否可以有多个:主键索引在一张表中只能有一个,而唯一索引在一张表中可以创建多个
是否回表:基于主键索引的查询一定不需要回表,基于唯一索引的查询,通常是需要回表的
索引结构:在InnoDB中,主键索引就是聚簇索引,而唯一索引通常是非聚簇索引
外键:主键可以被其他表引用为外键,而唯一索引是不可以的