关系数据库系统中使用的数据结构

use*_*027 7 rdbms data-structures

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

Nic*_*ole 9

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

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

我将在此处包含的大部分信息都将基于MySQL的知识.

索引

例如,MySQL 有几个,包括:

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

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

其他RDBMS将使用他们自己的规范,但我认为B树很常见.

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

行数据

这个答案再次变得复杂并且取决于存储引擎.如果您对实现细节感兴趣,我会阅读存储引擎.

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

始终对主键建立索引,并且可以选择索引其他值.如果不是,那么存储引擎找到它们的唯一方法就是"表扫描" - 从字面上看,循环遍历将列值与您要查找的值进行比较的所有数据.

Blob数据

可以将blob数据看作是一个没有特殊索引属性的大文件系统,除了能够通过主键为其行查找.它们也失去了每行分配固定空间的好处,这是一种能够存储大量任意数据的权衡.