面试题简述
你能说一下数据库索引的底层原理吗?为什么 MySQL 使用 B+Tree 作为索引结构?
面试官想听的
1、是否理解索引结构
2、为什么不用红黑树、哈希表、AVL
3、磁盘 IO 与页结构
4、聚簇索引/非聚簇索引
面试回答举例
数据库的索引底层主要是基于 B+Tree 结构,其核心目标是减少磁盘 IO。
详情请参考:http://xhslink.com/o/1IqqQmwpuOi
由浅入深分析
索引核心解决两件事:
1、快速定位
2、少做磁盘 IO
磁盘读取是按页读取,所以设计索引结构时要把尽可能多的 key 放到一个页中,这就是 B+Tree 的意义。
进一步深入:
1、OS page 与 MySQL page 的关系
2、key 的大小影响 fan-out(分支因子)
3、InnoDB 的自适应哈希索引(AHI)
面试加分点
1、提到数据库索引结构不是为了让算法好看,而是为了让磁盘 IO 次数最少,所以最终规则都是围绕磁盘展开的。
全部评论
(1) 回帖