非聚集索引与聚集索引具有相同的 B 树结构,它们之间的显著差别在于以下两点:
基础表的数据行不按非聚集键的顺序排序和存储。
非聚集索引的叶层是由索引页而不是由数据页组成
案例分析: 我们来查看一个表的存储结构,我们在此使用的表是一个生产表,共有1亿多条记录,查看表的object_ID,如下图所示:

此表,我已经做了分区,查看其分区信息,可以使用下图所示的命令:

从上图可以看到,此表共有16个分区,对应不同的索引,基本上每个分区都有1千多万条记录。从此图中还可以看到堆或者B树的ID跟分区ID是一样的,如果希望进一步查看某一个索引的具体信息,可以使用下面的命令,如查看72057594067419136的信息。

从这个图当中,我们可以看到这个分区只有一个分配单元,IN_ROW_DATA表明此分配单元只用来存放具体数据,共5353页,已使用5346页,数据占用5320页。
如果希望查看根页的位置,可以使用下面的命令:

但需要注意,这里显示的根页的位置是0xEC0100001100,由于存储的关系,用倒序的方式对它进行解析,也就是0x0011000001EC,最前面的两个字节表明是所在的文件组编号,后面的4个字节是页的编号,即(1,0x01CE) ,换成十进制(1,492),然后可以利用我们上一节所说的DBCC PAGE命令查看页的信息,如下图所示:

从中可以看到具体的数据,此界面的返回结果会因表上的聚集索引、非聚集索引而不同。如果查看一个表使用的总页数和区数,也可以使用命令:DBCC SHOWCONFIG,如下图所示:

在同样表结构的情况下,建立聚集索引不会增加表格的大小,但是建立非聚集索引反而会增加不少空间,在性能方面,SQL Server产品组做过测试,在select、update、delete操作下,聚集索引性能较高,在插入记录时,聚集索引和非聚集索引性能相同,没有出现聚集索引影响插入速度的现象,但在生产环境中,还是要谨慎行事。










