zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    【POJ1961 Period】【KMP】
    浅谈KMP算法
    【关于动态开点线段树】
    【POJ3349 Snowflake Snow Snowflakes】【Hash表】
    【NOI 2002 银河英雄传说】【带权并查集】
    路径问题
    group_concat函数详解
    MySQL中GROUP_CONCAT中排序
    怎么实现CSS限制字数,超出部份显示点点点.
    jsp去掉小数点
  • 原文地址:https://www.cnblogs.com/ustcyc/p/4527089.html
Copyright © 2011-2022 走看看