然后将这些部分存储在驱动器上。每个部分称为一个页面,通常为
大小(尽管这是可配置的)。遗憾的是,由于数据库通常不允
许一行跨越多个页面,因此浪费了一些空间。这种现象称为 “碎片
化”,会导致一些空间浪费。扫描整个表时,数据库引擎必须读取的
数据量,会超过数据的实际大小,这使得整个过程更加缓慢。
当我们考虑数据修改时,事情会变得更加复杂。当我们删除一行
时,数据库引擎必须将其从页面中删除,而这种情况实际上很少发
生。更常见的是,数据库只是将行标记为已删除(“已死”),然后在
扫描表时忽略它。但是,数据库仍然需要读取死行,当我们有很多
死元组时,这可能会进一步降低性能。
这意味着随着时间的推移,我们的数据库会变慢。为了辅助改善
这一点,我们需要对表进行碎片整理(有时称为 “
)。此
过程使数据库读取所有数据,并以更有条理的方式将其写入一侧,
以删除死元组并恢复一些浪费的空间。
由于所有这些内部细节,数据库引擎有很多方法可以加快速度。
第一种方法是用多个读取器并行扫描表。如果我们可以一次执行多
个读取,这会使事情变得更快,当我们将驱动器放在
磁盘阵
列中时,这通常是可能的。然而,真正改变游戏规则的是索引。
聚集索引是一种将数据保存在
树(广义二叉树)中的结构。所
有行都根据一些属性(如行号)进行排序,因此我们可以更快地搜
索行。最重要的是,我们不需要读取所有数据来根据标识符查找行。
这样我们就可以避免昂贵的读取,并轻松 “跳转” 到所需的记录。请
相关文档
评论