在RDBMS中使用什么数据结构来存储我们输入的实际数据,姓氏姓氏等等,我知道B和B +树对于索引等是有效的,但我还没有得到一个明确的答案这,请原谅我的无知。
答案 0 :(得分:8)
这通常取决于存储引擎,原始数据将存储在不同的数据库数据分类中,其中至少有三个常见的分区:
我将在此处包含的大部分信息都将基于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数据视为一个没有特殊索引属性的大文件系统,除了能够通过主键查找其行。它们也失去了每行分配固定空间的好处,这是一种能够存储大量任意数据的权衡。