【发布时间】:2011-02-13 07:41:24
【问题描述】:
我很难理解 SQL Server 2005 中的聚集索引是什么。我阅读了 MSDN 文章 Clustered Index Structures(以及其他内容),但我仍然不确定我是否理解正确。
(主要)问题是:如果我将一行(带有“低”键)插入到带有聚集索引的表中会发生什么?
上面提到的 MSDN 文章指出:
数据链中的页面和其中的行按照聚集索引键的值排序。
例如Using Clustered Indexes 声明:
例如,如果将一条记录添加到靠近顺序排序列表开头的表中,则表中该记录之后的任何记录都需要移动以允许插入记录。
这是否意味着如果我将具有非常“低”键的行插入到已经包含大量行的表中,所有行都在磁盘上物理移动?我不能相信。这需要很长时间,不是吗?
或者(我怀疑)是否有两种情况取决于第一个数据页的“完整”程度。
- A) 如果页面有足够的可用空间来容纳记录,则将其放置到现有数据页面中,并且数据可能会(物理上)在该页面内重新排序。
- B) 如果页面没有足够的可用空间来记录,则会创建一个新数据页面(磁盘上的任何位置!)并“链接”到B 树?
这意味着数据的“物理顺序”仅限于“页面级别”(即在数据页面内),而不是位于物理硬盘驱动器上连续块上的页面。然后,数据页就会以正确的顺序链接在一起。
或者以另一种方式表述:如果 SQL Server 需要读取具有聚集索引的表的前 N 行,它可以顺序读取数据页(按照链接)但这些页不是(必须)在磁盘上按顺序逐块(因此磁盘头必须“随机”移动)。
我离我有多近? :)
【问题讨论】:
标签: sql-server sql-server-2005 indexing clustered-index