1、什么是索引
索引是一种特殊的文件,它里面包含对数据表里的所有记录的指针。
数据库索引是一种排序的数据结构,可以协助快速查询、更新数据库表中的数据。
2、索引的优缺点
优点:
(1)大大加快数据的检索速度
(2)在查询过程中,使用优化隐藏器,提高系统性能。
缺点:
(1)时间方面:创建和维护索引需要耗费时间,对表中的数据进行增删查改时,索引也需要动态的维护,也会耗费时间。
(2)空间方面:索引是一种文件,需要占用物理空间。
3、MySQL的索引类型
(1)普通索引:即一个索引只包含单个列,一个表可以有多个单列索引。
(2)唯一索引:索引的列的值,必须唯一,但允许有空值。
(3)复合索引:多列值组成一个索引,专门用于组合搜索,其效率大于索引合并。
(4)聚簇索引:在InnoDB中,索引B+树的叶子结点存储了整行数据的是 主键索引(也叫作聚簇索引)。也就是说,将数据存储和索引放到了一块,找到了索引,也就找到了数据。
(5)非聚簇索引:在InnoDB中,如果索引B+树的叶子结点存储了主键的值,它就是非主键索引(也叫作非聚簇索引)。
4、聚簇索引和非聚簇索引的区别
非聚簇索引的叶子结点,存储的是该列对应的主键,而不是表中的数据。
5、索引的底层实现
B+树性质:
(1)B+树的每个非叶子结点,存放的元素只用于索引所用,所有数据保存在叶子结点。
(2)n棵子树的结点包含n个关键字,不用来保存数据,而用来保存数据的索引。
(3)所有的叶子结点中,包含了全部关键字的信息,及指向含这些关键字的指针,且叶子结点本身根据关键字的大小,从小到大顺序链接。
(4)所有的非叶子结点可看成是索引部分,结点中仅含其子树中的最大(或最小)关键字。
(5)B+树中,数据对象的插入和删除仅在叶子结点上进行。
(6)B+树有两个头指针,一个是树的根节点,一个是最小关键字的叶子结点。
一个m阶的B+树规定:
(1)有k个子树的中间结点包含k个元素,每个元素不保存数据,只用来索引,所有数据都保存在叶子结点上。
(2)所有的叶子结点中包含了全部元素的信息,以及指向这些元素记录的指针,且叶子结点本身根据关键字的大小,自小而大顺序链接。
(3)所有的中间结点元素都同时存在于子节点,在子节点元素中是最大(最小)元素。
B+树的好处
(1)B+树的磁盘读写代价更低
(2)B+树的数据都存放在叶子结点中,分支结点均为索引,方便扫库,只需扫一遍叶子结点即可。更适用于区间查询。