7.4.1. 设计选择

MySQL将行数据和索引数据保存在不同的文件中。许多(几乎所有)其它数据库将行数据和索引数据混合保存在用一个文件中。我们认为MySQL 选择对广范围的现代系统更好一些。

保存行数据的另一种方式是将每个列的信息保存在单独的区域(例如SDBMFocus)。这样会对每个访问多个列的查询造成性能问题。因为当访问多个列时退化得很快,我们认为该模型对一般数据库不合适。

更常见的情形是索引和数据保存在一起(例如Oracle/Sybase)。在这种情况下,你可以在索引的叶级页找到行的信息。该布局比较好的事情是在许多情况下,根据索引缓存得怎样,可以保存一个硬盘读取。该布局的不利之处表现在:

·         表扫描要慢得多,因为你必须通读索引以获得数据。

·         你不能只使用表来检索查询的数据。

·         你需要使用更多的空间,因为你必须从节点复制索引(你不能保存节点上的行)

·         删除要经过一段时间后才退化表(因为删除时通常不会更新节点上的索引)

·         只缓存索引数据会更加困难。

关注编程学问公众号