概念-Mysql索引面试题
hash索引和B+Tree索引区别
- hash索引只适合等值查询,无法进行范围查询
- 存在大量键值重复时候,hash索引效率很低
- hash索引无法利用索引进行排序
- 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