1.你现在线上的MySQL数据库是哪个版本?什么存储引擎?
5.6 InnoDB
2.该版本的索引的底层采用的是什么数据结构?(这里回答不上来就pass了,重点是想聊下面的B+树)
B+树
3.那么你知道为什么采用B+树吗?
B+树更为矮胖,可以减少磁盘I/O的次数(查找次数等于树的深度),而磁盘I/O是最大的时间开销
B+树所有数据都在叶子节点,由于有链表结构(叶子节点从小到大顺序两两相连),只需要找到首尾,通过链表就能把所有数据取出来,在做范围查找的时候效率更高
4.B+树和Hash索引比较起来有什么优缺点吗?
Hash索引在不存在hash碰撞的情况下,只需一次读取,查询复杂度为O(1),比B+数快
Hash索引是无序的,只适用于等值查询,而不能用于范围查询,也不具备排序性。根据hash索引查询出来的数据,还要再次进行排序
B+树索引的复杂度等于树的高度,一般为3-5次IO。B+树子节点上的数据是排过序的,可以用于范围查找
数据库的多列索引中,只能用B+数索引
5.最后,谈谈最左前缀匹配?
在创建多列索引时,根据业务需求,where子句使用最频繁的一列放到最左边,因为mysql索引查询会遵循最左前缀匹配的原则,在检索数据时从联合索引的最左边开始匹配。当我们创建一个联合索引的时候,如(key1,key2,key3),相当于创建了(key1),(key1,key2)和(key1,key2,key3)三个索引,这就是最左匹配原则。