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