关于数据库的索引

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