为什么要使用索引?
索引可以避免全表扫描去查找索引,提升检索效率。
什么样的信息能成为索引?
主键,唯一键等能区分数据唯一性的字段都能成为索引。
索引的数据结构?
主流是B+树,还有Hash,Bitmap。其中MySQL数据库不支持Bitmap索引。
密集索引和哈希索引的区别?
密集索引稀疏索引
索引的优化
1、二叉查找树
时间复杂度O(logn)
2、B-Tree
定义:
根节点至少包括两个孩子
树种每个节点最多含有m个孩子(m>=2)
除根节点和叶子节点,其它每个节点至少有ceil(m/2) 个孩子
所有叶子节点都位于同一层
3、B+-Tree
B+树是B树的变体,其定义基本与B树相同,除了
非叶子节点的子树指针与关键字个数相同。
非叶子节点的子树指针P[i], 指向关键字(K[i],k[i+1])的字树
非叶子节点仅用来索引,数据都保存在叶子节点中
所有叶子节点均有一个链指针指向下一个叶子节点
结论:
B+树更适合用来做索引
B+树对磁盘读写代价更低
B+数的查找效率更加稳定
B+数更有利于对数据库的扫描
4、Hash索引
缺点:
仅能满足“=”,“IN”,不能使用范围查询
无法被用来避免数据的排序操作
不用利用部分索引键查询
不能避免表扫描
遇到大量Hash值相等的情况后性能不一定就会比B-Tree索引高。
5、BitMap索引(位图索引)(使用较少)