【问题标题】:Insert into table with clustered index插入到带有聚集索引的表中
【发布时间】:2012-07-21 00:41:07
【问题描述】:

如果我没记错的话,聚集索引会根据一些自定义顺序对磁盘上的表行进行物理排序。我假设表存储在文件中(可能每个表一个文件?)。好吧,但是,假设有人在表格中插入了一个“新行”,并且应该将其放置在例如开头。然后数据库需要在文件中物理地移动整个表(所有行)?是不是太慢了,或者有什么优化技术如何实现插入后的排序?

【问题讨论】:

  • 如果您谈论的是 SQL Server - 那么数据保存在以平衡的 b 树结构组织的 8K 页中。在表中插入新行的位置几乎无关紧要 - 可能需要采取或不需要采取一些步骤,但它绝对不是需要的“顺序”文件式结构插入新行时移到后面...

标签: sql database indexing clustered-index


【解决方案1】:

表不一定存储为文件。从逻辑上讲,它们存储在页面中。假设每个页面有 100 行,并且在需要时可以容纳额外的 20 行。然后将所有页面链接在一起,形成整个表格数据。

在您的情况下,当您在开头添加新行时,您只需更改第一页,仅移动 100 行。如果您一遍又一遍地这样做,当该页面的行数超过 120 时,该页面将被拆分为两个链接在一起的新页面。

【讨论】:

  • 我只想添加 . . . “表不一定存储为文件”。数据库可以随意存储表,一些支持 SQL 的数据库可能会选择将表放在文件中。大多数人没有,但这是编写引擎的人的设计决定。
  • 好点。当然,任何数据库都可以将表保存到文件中。我对这个问题给出了一般性的看法。但在大多数情况下和大多数 DBMS,如 Oracle、DB2 或 SQL 服务器,它是这样的:行 -> 页面 -> 表 -> 文件或磁盘。我会根据你的观点编辑我的回复。
猜你喜欢
  • 1970-01-01
  • 2013-10-08
  • 2018-09-13
  • 2013-06-04
  • 2015-07-04
  • 2015-10-13
  • 2021-12-14
  • 1970-01-01
  • 2018-05-08
相关资源
最近更新 更多