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

时间:2013-09-29 18:33:13

标签: data-structures rdbms

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

1 个答案:

答案 0 :(得分:8)

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

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

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

索引

例如,MySQL has several,包括:

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

文档甚至包含页面comparing how it uses each

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

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

行数据

这个答案再次变得复杂,直到存储引擎。如果您对实现细节感兴趣,我会阅读存储引擎。

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

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

Blob数据

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