简介
在一本厚厚的书籍的前几页,通常会有几页目录。作用是让读者可以快速找到感兴趣的章节进行阅读。
目录之所以可以快速阅读,是因为它提前进行了结构化+有序处理。
同样的道理,数据库的数据表的文件下面(以 ClickHouse 为例),通常也有索引文件(目录 primary.idx)加上数据文件(正文页 data.bin), 使得查询快速。
索引之所以能提升查询速度,在于它的结构化+有序。
查找数据结构进化史
线性查找:一个个找;实现简单;太慢
二分查找:有序;简单;要求是有序的,插入特别慢
HASH查找:查询快;占用空间;不太适合存储大规模数据
二叉查找树:插入和查询很快(log(n));无法存大规模数据,复杂度退化
平衡树:解决 BST 退化问题,树是平衡的;节点非常多的时候,依然树高很高
多路查找树:一个父亲多个孩子节点(度);节点过多树高不会特别深