索引:如何在海量数据中快速查找某个数据?

  • 数据的存储,在底层只有两种形式:连续空间存储 和 零散空间存储,这两种形式对应了两种最基本的数据结构:数组 和 链表

  • 使用这两种数据结构存储数据的空间利用率是最高的,但是如果想要实现更加快速的查找,我们就需要使用额外的操作,这两种操作是:用额外计算获取数据地址 和 用额外空间保持一种方便查找的结构。

  • 用额外的计算获取数据地址,这种思路只能用于数组,因为数组的下标可以计算内存地址。具体应用如下:
    1.使用数组下标进行数据的随机访问,这也是数组的杀手锏
    2.通过对数据的计算确定数据应该存放的位置,这就是 散列表,这种计算方法就是哈希函数

  • 用额外的空间保持方便查找的结构,这种思路用于“使用零散空间存储数据的情况”,你仔细思考,跳表、红黑树、B+树 是不是都是这种思路的产儿?
    1.跳表通过设置额外的节点索引,实现了加快数据查询的功能。
    2.红黑树、B+树 通过树这种结构用不同孩子保存了不同数据间的关系。

  • 不同数据结构的组合可以实现更多功能。

  • 如果想实现范围索引,最好的办法是使用有序链表,我们通过某种方法,找到数据范围中的起始结点,然后通过有序链表依次输出范围内的结点,直到数据超出范围,这里有几个现成的例子:
    1.跳表:通过额外的结点找到有序链表的起始结点,然后依次输出
    2.B+树:通过查找叶子节点定位有序链表的起始节点,然后依次输出

你可能感兴趣的:(索引:如何在海量数据中快速查找某个数据?)