问:你的系统使用了什么数据库?
答:是使用的MySQL数据库。
问:你了解过MySQL索引吗?有哪些呢?
答:MySQL常用的有innodb和myisam索引。
问:那innodb底层采用的是什么结构呢?
答:它底层采用的是b+树的结构,内部也支持hash的结构。
好了,面试官引导的差不多了,接下去就要好好回答了。
问:那为什么不是b树或者其他的树结构呢?
答:b+树是一个多叉的平衡树,平衡树就是每个节点的叶子节点高度差不超过1,并且在它的非叶子节点存储的是索引,数据全都存储在叶子节点中,用一个链表串联起来,遍历时只需遍历该链表。
问:那为什么是多叉并且是平衡呢?
答:多叉且平衡可以使树的高度降低,降低查询时IO的次数。并且索引存在着一定的顺序,支持范围的比较查询。
问:那么一般数据库表会有多个索引,查询随便一个非主键索引时是如何查询的呢?
答:在数据库中,存在主键(聚集)索引和普通索引。如果没有指定默认会生成一个聚集索引,在查询非聚集索引时,该索引数据结构的底层存储的是主键的值,因此会根据查询到的主键再做一次回表查询 在使用explain关键字时会出现 using index condition。
问:那么如何避免回表查询呢?
答:我们可以利用索引覆盖的原理,在出了主键索引外,对要查询的其他字段添加普通索引即可。