2012-07-22 140 views
1

如果我没有弄错聚簇索引根据一些自定义顺序在磁盘上物理排序表的行。我假设表格存储在文件中(也许每个表格有一个文件?)。那么不过,假设有人在表格中插入一个“新行”,并且应该放置在开始处。数据库然后需要在文件中物理地移动整个表格(所有行)?是不是太慢或有没有任何优化技术如何在插入后实现排序顺序?插入聚簇索引表

+1

什么RDBMS? SQL Server? – 2012-07-22 15:08:26

+0

如果您正在谈论** SQL Server ** - 那么数据将以8K页的形式保存在一个平衡的b-tree结构中。在表格中插入新行的位置几乎是不相关的 - 可能或可能不需要执行某些步骤,但它肯定是**而不是“顺序”文件类结构,需要转移到当插入一个新行时......回到 – 2012-07-22 15:59:19

回答

3

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

就你而言,当你在开始时添加一个新行时,只需更改第一页,只需移动100行。如果您一遍又一遍地执行该操作,那么当该页面的行数超过120时,该页面将被拆分为两个链接在一起的新页面。

+0

是啊,你是对的,我的错误。 – 2012-07-22 15:17:26

+0

我只想补充一下。 。 。 “表格不一定存储为文件”。数据库可以存储不管他们喜欢的表,并且一些支持SQL的数据库可能会选择将表放入文件中。大多数不这样做,但这是编写引擎的人的设计决定。 – 2012-07-22 16:13:02

+0

好点。当然,任何数据库都可以将表格保存到文件。我对这个问题给出了一个总体的看法。但在大多数情况下以及大多数DBMS(如Oracle,DB2或SQL服务器)中,它都是这样的:行 - >页 - >表 - >文件或磁盘。根据你的观点,我会编辑我的回复。 – 2012-07-22 19:14:11