SQL Server性能优化(12)非聚集索引的组合索引存储结构

一,非聚集索引组合索引

用户可以在多个列上建立索引,这种索引叫做复合索引(组合索引)。但复合索引在数据库操作期间所需的开销更小,可以代替多个单一索引。当表的行数远远大于索引键的数目时,使用这种方式可以明显加快表的查询速度。
同时有两个概念叫做窄索引和宽索引,窄索引是指索引列为1-2列的索引,如果不特殊说明的话一般是指单一索引。宽索引也就是索引列超过2列的索引。
设计索引的一个重要原则就是能用窄索引不用宽索引,因为窄索引往往比组合索引更有效。拥有更多的窄索引,将给优化程序提供更多的选择余地,这通常有助于提高性能。

/****** Object:  Index [NonIxUser]    Script Date: 05/25/2015 09:03:01 ******/ 
CREATE NONCLUSTERED INDEX [NonIxUser] ON [dbo].[Users] 
( 
    [NAME] ASC, 
    [ID] ASC 
) 
GO

或者在GUI里
image

二、组合索引的根节点结构

首先查看该表的物理结构

--开启跟踪标志 
DBCC TRACEON(3604,2588) 
--DBCC TRACEOFF(3604,2588) 
---获取对象的数据页,结构:数据库、对象、显示 
DBCC IND(Ixtest,users,-1)

image

在查看第一个索引叶子节点的内容

DBCC page(IxTest,1,201,3)

image

注:

1. 组合索引查询不包含的列时,还是会走RID查询。

2. 如果是Include的索引,同样会在索引叶子节点里多相关的列,但是其列头上不包含(Key)这个关键字。如下

image

 

参考:

MSDN上关于包含列列数限制的描述:https://technet.microsoft.com/zh-cn/library/ms191241(v=sql.105).aspx

posted @ 2015-05-25 09:17  悉路  阅读(1974)  评论(0编辑  收藏  举报