目录
一、为什么要使用索引
1.全表扫描在数据量大的时候很慢(数据量小比使用索引快)
2.将关键信息作为索引,根据这些关键信息定位查询到我们想要的页面,可以大幅提高查询速度。
二、什么样的信息可以成为索引?
主键、唯一键、普通键都可以作为索引
三、索引的数据结构
1.二叉树
2.B Tree
3.B+Tree
4.Hash结构
四、不同结构的优缺点
1.二叉树
(1)有序数据会使其变为线性结构
(2)平衡二叉树可以解决线性问题
(3)磁盘IO的影响,它相对于内存来说是很慢的,对于树来说,IO次数就是树的高度。当数据量很大时,运行速度极慢。
2.B Tree
定义:
- 根节点至少包含两个孩子
- 树中每个节点最多含有m个孩子
- 根和叶子结点以外的节点至少有ceil(m/2)个孩子
- 所有叶子节点位于同一层
优势:
(1)满足定义的B树是平衡树,不会变成线性结构
(2)有效降低高度,较少IO
3.B+树
B+树的定义
(1)非叶子节点的子树指针与关键字个数相同
(2)非叶子结点的子树指针P[i],指向关键字值[ K[i] , K[i+1] )的子树
(3)非叶子节点仅用来索引,数据都保存在叶子节点中
(4)所有叶子节点均有一个链指针指向下一个叶子节点
B+树的优点
(1)每个节点不保存数据,可以容纳更多索引,更“矮胖”
(2)必须查找到叶子节点,更加稳定。
(3)对于范围查找,只需要遍历叶子结点链表,更快捷。
4.Hash索引
优缺点:
(1)效率高
(2)但是不能不稳定且不支持范围查询
(3)大量Hash值相等的情况,性能并不一定比B树索引高
4.bitMap索引
适合索引键和并发较少的情况
五、为什么通常使用B树而不使用二叉树
1.磁盘IO相对内存很慢。
2.数据库索引建立在磁盘上。
3.数据量大时,只能逐一加载每一个磁盘页(索引树的节点)。
4.因此对树来说,IO次数就是高度。
5.事实上:b树在查询时的比较次数并不比二叉树少,但是内存的访问速度很快,因此只要降低高度,即可提高运行效率。
六、密集索引和稀疏索引的区别
1.叶子节点保存:键值+同一行记录里的所有列信息
2.叶子节点保存:键值+该行数据的地址
七、索引是建立得越多越好吗
1.数据量小不需要建立索引,若建立会增加额外开销
2.索引建立的越多,维护成本越高
3.索引建立的越多,空间需要更多。