索引的出现为了提高查询效率,就像书的目录一样
常见索引模型
索引的实现方式有多种,常见的实现模型包括哈希表、有序数组和搜索树。
哈希表:
哈希表是一种key/value的存储方式,将值存储在数组中,将key根据一定的哈希算法计算出在数组中的位置,将value放在该位置上。
哈希表解决冲突方式,如果key的哈希值相同,就会在该位置拉出一个链表,然后存储相应的key/value
哈希表中存储的数据是无序的,所以区间查询时候会很慢,只适合等值查询
有序数组:
有序数组存储的key是递增的,所以有序数组在区间查询和等值查询都很优秀。但是有序数组在插入时比较慢,因为要向后移动整个数组。
搜索树
二叉搜索树是经典的数据结构:
二叉搜索树的查询效率为O(logN),为了维护树的平衡,保证查询效率的时间复杂度,二叉搜索树的插入效率为O(logN)。
缺点:
数据是要存在磁盘中的,百万级别的数据如果要使用二叉树存储,那么必然会增加树高,从而增加磁盘寻址的代价,
为了较少磁盘的交互,查询尽量访问较少的数据块,我们就i不因该使用二叉树,而应该使用N叉树。