9

RDBMS 中使用什么数据结构来存储我们输入的实际数据,firstname lastname 等等,我知道 B 和 B+ 树对于索引等是有效的,但是我还没有得到一个 cpnvincing 的答案,拜托原谅我的无知。

4

1 回答 1

11

这通常取决于存储引擎,原始数据将存储为不同分类的数据库数据,其中至少有三个常见的划分:

  • 索引(指向包含该值的行的键)
  • 行数据(非 blob 数据,这里有一些信息
  • Blob 数据(通常是批量数据;将其视为您通常不搜索的扩展数据,而是在通过其他键查找行后批量检索)

我将在这里包含的大部分信息将基于 MySQL 的知识。

索引

例如,MySQL有几个,包括:

据我所知,InnoDB 和 MyISAM使用 B-tree 索引,而内存存储引擎允许您指定 b-tree 或哈希索引。

文档甚至包含一个比较它如何使用每个.

其他 RDBMS 将使用自己的规范,但我想 B-tree 很常见。

通常,一个索引会像一个自己的小表。索引值是主键,值是包含该值的行的主键列表。

行数据

这个答案又很复杂,取决于存储引擎。如果您对实现细节感兴趣,我会阅读存储引擎。

行以可以通过某些主键快速查找的数据格式存储。行通常具有相对较小的固定限制(认为 2 16字节),这有助于提高速度,之后将进一步的数据推送到扩展数据

主键始终被索引,其他值可以选择索引。如果它们不是,那么存储引擎找到它们的唯一方法将是“表扫描”——字面意思是,循环遍历所有数据,将列值与您正在查找的值进行比较。

Blob 数据

将 blob 数据想象成一个没有特殊索引属性的大型文件系统,除了能够通过其行的主键查找之外。它们还失去了为每行分配固定空间的好处,这是能够存储大量任意数据的权衡。

于 2013-09-29T18:39:33.593 回答