2012-09-18 95 views
1

我很惊讶地知道,SQL Server(我测试了2008 R2版本,但这似乎也适用于早期版本)允许将数据插入到没有定义主键(因此为聚簇索引)的表中。插入数据到没有主键的表中?

它怎么可能以及这些表的物理存储方式如何?

+3

为什么不可能?这些表格被称为堆。 – Oded

+2

主键!=聚集索引。你可以有一个非聚集PK或一个不是PK的聚集索引。 –

+0

实际上,这在Azure SQL数据库中是不可能的(我认为这是SQL Azure的当前市场名称) - 您无法创建没有主键的表。但是马丁是绝对正确的,你不需要一个PK来拥有一个聚集索引,而当你有一个PK时,它不必被聚集。 –

回答

3

帮助此处链接:

http://www.sqlmag.com/blog/sql-server-questions-answered-28/sql-server/what-happens-if-i-drop-a-clustered-index-137109

问:我听说聚集索引“的数据,”但我不完全 明白是什么意思。如果我删除一个聚集索引,我会 丢失数据?

答:我被问了很多这个问题,我发现索引结构 往往会让人迷惑;指标看起来很神秘,因此无意中认为它非常复杂。内部可以存储表格 ,有或没有聚集索引。如果一个表没有 聚簇索引,则它被称为堆。如果该表具有群集的 索引,则通常将其称为群集表。当创建一个集群 索引时,SQL Server将临时复制堆中的 数据并将其排序为聚簇索引键顺序(因为键 定义了数据的排序)并删除与堆相关的原始页 。从这一点开始,SQL Server将 通过一个双向链表和一个B +树 在逻辑上维护顺序,用于导航到数据中的特定点。