hash索引和B+Tree索引区别

  1. hash索引只适合等值查询,无法进行范围查询
  2. 存在大量键值重复时候,hash索引效率很低
  3. hash索引无法利用索引进行排序
  4. hash索引无法利用联合索引做前缀匹配原则

B+Tree叶子节点能存储哪些东西

可以存储整行数据或者是主键索引值,当存储整行数据时候为主键索引,存储主键索引时候是非主键索引。非主键索引在进行查询时候需要先寻找主键索引,根据主键索引获取需要的数据,这个查询两次的过程叫做回表。非主键索引中的联合索引可以通过做前缀原则实现覆盖索引的效果

创建联合索引的时候,如何选择联合索引的字段顺序

创建联合索引需要考虑联合索引字段的顺序,where子句中使用最频繁的一列放在最左边。比如我们创建了联合索引idx_k1_k2_k3(key1,key2,key3)三个索引相当于创建了idx(key1,key2,key3) idx(key1,key2) idx(key1)三个索引。

局部性原理

平衡二叉树查找效率确实很高,但是频繁的IO才是阻碍提高性能的瓶颈,怎样减少IO次数呢?前辈们很聪明的提出了局部性原理,分为时间局部性原理和空间局部性原理

时间局部性原理:即假如你查询id为1的用户数据,过一段时间你还会查询id为1的数据,所以会将这部分数据缓存下来。

空间局部性原理:当你查询id为1的用户数据的时候,你有很大的概率会去查询id为2,3,4的用户的数据,所以会一次性的把id为1,2,3,4的数据都读到内存中去,这个最小的单位就是页。页大小是由linux系统决定的,4k或者8k

参考

B树和B+树