今天在网上看到一篇关于数据库索引的文章,在里面,他谈到了sql server的两种索引。
一种是聚集索引,一种是非聚集索引,但是,在文章里面,我只是看到了,用聚集索引的优点
等等。请问,那非聚集索引一般在什么情况下使用呢。

解决方案 »

  1.   

    参考一下:
    SQL Server 的聚簇索引与非聚簇索引
    聚集索引:表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的影响比较大。 
    非聚集索引:不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/修改/删除的影响很小。 
    一张表只有一个聚簇索引,可有多个非聚簇索引。 
    下表描述聚簇索引与非聚簇索引的适用范围: 动作描述 使用聚集索引  使用非聚集索引 
    列经常被分组排序 应 应 
    返回某范围内的数据 应 不应 
    返回精确匹配的数据 不应 应 
    一个或极少不同值 不应 不应 
    小数目的不同值 应 不应 
    大数目的不同值 不应 应 
    频繁更新的列 不应 应 
    外键列 应 应 
    主键列 应 应 注:主键列如果是采用标识且经常用于范围查询,则适用聚簇索引,否则适用非聚簇索引。
      

  2.   

    嗬嗬,我看的正是大家贴出来的那篇文章。
    我是看到下面这个例子时,想到的我提出来的问题的。
    在这里对fariqi字段建立非聚集索引和不建立,
    查询时间是相差无几的。
    所以4楼说的奇效,是在什么时候呢。能具体地说个例子吗?文章引用:
    在这里之所以提到“理论上”三字,是因为如果您的聚集索引还是盲目地建在ID这个主键上时,您的查询速度是没有这么高的,即使您在“日期”这个字段上建立的索引(非聚合索引)。下面我们就来看一下在1000万条数据量的情况下各种查询的速度表现(3个月内的数据为25万条):  (1)仅在主键上建立聚集索引,并且不划分时间段:  Select gid,fariqi,neibuyonghu,title from tgongwen  用时:128470毫秒(即:128秒)  (2)在主键上建立聚集索引,在fariq上建立非聚集索引:  select gid,fariqi,neibuyonghu,title from Tgongwen  where fariqi> dateadd(day,-90,getdate())  用时:53763毫秒(54秒)  (3)将聚合索引建立在日期列(fariqi)上:  select gid,fariqi,neibuyonghu,title from Tgongwen  where fariqi> dateadd(day,-90,getdate())  用时:2423毫秒(2秒)