Met*_*hor 1 sql-server clustered-index
如果 SQL Server 聚集索引是表的物理顺序,并且包含所有列,那么它是表本身吗?聚集索引是如何物理存储的?
我看过问答什么是聚集索引?但我的问题是关于这些的物理组织,而不是它们的功能。
不要被物理/逻辑方面所困扰。这只是术语,您所说的“物理”最终只是抽象级别的问题。IMO,术语“物理”是无意义的、令人困惑的,在这种情况下应避免使用。
这两种类型的索引都是 B-Tree 索引。确保您了解这是什么,并且您可以可视化 B 树索引。
对于集群,叶子不仅包含键,还包含所有其他列,使其成为“表本身”。
对于非聚集索引,叶子只有键列和包含的列 - 以及指向实际数据的指针。
叶子在第一页 (8 KB) 指向下一页的地方被链接,等等(双向链表)。修改完成后,您可能会在将页面插入到此链表中的位置进行页面拆分,因此查看文件中的页码,在从头到尾跟踪链表时(使用指针)来回跳转. 这适用于聚集索引和非聚集索引。
的簇索引是逻辑排序表本身的数据转换为B树结构。如果没有聚集索引,则表本身在逻辑上存储在堆数据结构中。这篇SQL Server 中的聚集索引与堆的文章探讨了两者之间的结构差异。
另一件需要注意的事情是聚簇索引还指定了对数据进行逻辑存储时的故意排序,而没有聚簇索引的表,因此在逻辑上存储为堆,通常没有顺序,因此在逻辑上随机排序。
如果架构正确,在表上使用聚集索引的好处是它可以用来提高查询的性能,当 SQL 引擎可以在它上面寻找这些查询的谓词时,而不是一个表最终需要完整扫描的聚集索引。
关于聚簇索引和非聚簇索引之间差异的问题:聚簇索引在逻辑上对表本身进行排序,非聚簇索引从表中对数据的副本(非聚簇索引涵盖和包含的任何字段)进行逻辑排序。
无论使用哪种逻辑数据结构,物理上的数据都存储在磁盘上的页和区中。页面通常是 8 KB 的数据集,而范围是 8 个物理上连续的页面的集合。
归档时间: |
|
查看次数: |
119 次 |
最近记录: |