1、索引的作用:加快查询。
2、索引的类型:唯一索引,主键索引和聚集索引
3、索引的底层实现:首先是平衡树,也就是B-Tree/B+Tree。然后别的还有哈希桶和位图,后面两种比较少用。
4、来说一下啊自我对于平衡数区别的理解:
-----B树里面的每个结点,不论是叶结点还是非叶结点,都含有Key和一个指向数据的指针。这样,一旦找到某个结点以后,就可以根据指针找到对应的磁盘地址。
这也会使每一个数据的指针带来额外的内存占用,从而减少放入内存的结点数。
----B+树所有的叶子结点才有指向数据的指针。非叶结点就是纯的索引数据。这样我们就可以尽可能的将非叶结点载入内存,没有浪费。而且每个叶结点都有指向
下一个叶结点的链接。这样我们还可以从任意一个叶结点开始遍历,获取接下来所有的数据。
表面上看B树要比B+树跟好,但是B树实现成本低,合适的地方也很适用。ORACLE的默认索引就是B+树。
5、各种索引的应用场景
B+树最常用,性能很好,用于范围查询和单值查询都可以。特别是范围查询,非得用B+树这种顺序的才可以了。
HASH的如果只是对单值查询的话速度会比B+树快一点,但是ORACLE好像不支持HASH索引,只支持HASH表空间。
位图的使用情况很局限,只有很少的情况才能用,一定要确定真正适合使用这种索引才用(值的类型很少并且需要复合查询),否则建立一大堆位图就一点意义都没有了。
最后是几个问题
为什么要给表加上主键?
为什么加索引后会使查询变快?
为什么加索引后会使写入、修改、删除变慢?
什么情况下要同时在两个字段上建索引?
如果经常需要同时对两个字段进行AND查询,那么使用两个单独索引不如建立一个复合索引,因为两个单独索引通常数据库只能使用其中一个,
而使用复合索引因为索引本身就对应到两个字段上的,效率会有很大提高。
原文:https://www.cnblogs.com/yhd1024/p/10794189.html