阵列、树和哈希

二维阵列是最简单的数据结构。一个表可以看作是个阵列,

虽然这个方法保存和视觉话数据很棒,但是当你要查找特定的值它就很糟糕。
会造成N次运算,虽然还行的,但是还有更快的方法呢

树和数据库索引

  • 二叉搜索树是带有特殊属性的二叉树,每个节点的关键字必须 :
    • 比保存在左子树的任何键值都要大
    • 比保存在右子树的任何键值都要小

「 二叉查找树/二叉搜索树,或称二叉排序树。」
这回去查找某个特定的数据就是log(N)次运算了。这种想象的就是一个数据库索引。

B+树索引
以上内容查找一个特定值这个树确实好用,但当你查找两值之间的多个元素时,你的成本就是O(N),
因为你必须查找树的每一个结点,以判断它是否处于那2个值之间。而且这个操作不是磁盘I/O有利的,
因为你必须读取整个树。我们需要找到高效的范围查询方法。为了解决这个问题,
现代数据库使用了一种修订版的树,叫做B+树。

  • 在一个B+树里:
    • 只有最底层的节点(叶子节点)才保存信息(相关表的行位置)
    • 其他节点只是在搜索中用来指引到正确节点的。

你可以看到,节点更多了(多了两倍)。
确实,你有了额外的节点,它们就是帮助你找到正确节点的『决策节点』(正确节点保存着相关表中行的位置)。
但是搜索复杂度还是在 O(log(N))(只多了一层)。
一个重要的不同点是,最底层的节点是跟后续节点相连接的。

我们最后一个重要的数据结构是哈希表。
当你想快速查找值时,哈希表是非常有用的。
而且,理解哈希表会帮助我们接下来理解一个数据库常见的联接操作,叫做『哈希联接』。
这个数据结构也被数据库用来保存一些内部的东西(比如锁表或者缓冲池,我们在下文会研究这两个概念)。

如果有人问你数据库的原理,叫他看这篇文章