受到这篇文章的启发:https : //twitter.com/#!/ SQLChicken/status/ 102930436795285505
堆:它们是否被视为索引结构,或者严格来说是没有索引的表结构?
受到这篇文章的启发:https : //twitter.com/#!/ SQLChicken/status/ 102930436795285505
堆:它们是否被视为索引结构,或者严格来说是没有索引的表结构?
Answers:
从MSDN- 表和索引组织:
“ SQL Server表使用以下两种方法之一来组织分区中的数据页:
数据行基于聚簇索引键按顺序存储。聚集索引被实现为B树索引结构,该结构基于行的聚集索引键值支持对行的快速检索。索引的每个级别中的页面(包括叶级别中的数据页面)都在双向链接列表中链接。但是,可以使用键值从一个级别导航到另一个级别。
数据行不以任何特定顺序存储,并且数据页的顺序没有特定顺序。数据页未在链接列表中链接。”
“根据定义,堆表是没有任何聚集索引的表。基于堆的表的不同页面占据磁盘上不同的非连续区域,并且它们没有以任何方式链接在一起。”
相对于- 聚集索引结构:“在SQL Server中,索引被组织为B树。索引B树中的每个页面称为索引节点。B树的顶部节点称为根节点。索引中节点的最底层称为叶节点,根节点与叶节点之间的任何索引级别统称为中间级别。在聚簇索引中,叶节点包含基础表的数据页。中间级节点包含保存索引行的索引页,每个索引行包含一个键值和一个指向B树中的中间级页或索引的叶级中的数据行的指针。该索引被链接到一个双向链接列表中。”
其他参考:
索引表示行有数据顺序。鉴于没有使用任何这样的顺序创建堆并且也不维护任何顺序,因此这只是存储表数据的一种方法。
有一些示例(例如dm_db_index_physical_stats)在其中指定堆,但您必须输入索引ID0。尽管这似乎与我刚才所说的相矛盾,但我认为这只是简化API及其简化的神奇值。用法; 而已。
没有聚集索引的表结构。