在SQL Server中,非聚集索引其实可以看做是一个含有聚集索引的表,但相对实际的表来说,非聚集索引中所存储的表的列数要少得多,一般就是索引列,聚集键(或RID)。非聚集索引仅仅包含源表中的非聚集索引的列和指向实际物理表的指针。
一、非聚集索引之INCLUDE
非聚集索引其实可以看做一个含有聚集索引的列表,当这个非聚集索引中包含了查询所需要的所有信息的时候,则就不再需要去查基本表,仅仅做非聚集索引就能够得到所需要的数据。INCLUDE实际上也能称为覆盖索引,但它不影响索引键的大小。
先来看下面一张表:
此表大约是15万数据左右。聚集索引列是Id,我们先来在Name列建立一个非聚集索引。
-
CREATE NONCLUSTERED
-
INDEX Index_Name ON Person(Name)
然后执行查询:
SELECT Name,Age FROM Person where Name = '欧琳琳'
执行计划如下:
上面的执行过程是,先扫描非聚集索引列,找到聚集索引,然后在通过聚集索引定位到数据。
下面我们删除掉刚才那个索引,再建过另外一个。
-
DROP INDEX Person.Index_Name --删除非聚集索引Index_Name
-
CREATE NONCLUSTERED --再重新建过一次,这次我们INCLUDE Age列
-
INDEX Index_Name ON Person(Name