SQLServer 聚集索引优化方案

来源:互联网 发布:k svd算法 编辑:程序博客网 时间:2024/05/23 15:55

一、主键与聚集索引并不是一对一匹配的

一般情况下我们都认为,聚集索引和主键是相互匹配的,因为只要你在SQLServer表中定义了一个主键,那么SQLServer会为这个主键自动添加聚集索引.但是,如果你先在表中基于任意一列建立聚集索引,然后再选择另一列作为主键,这时,这个SQLServer将会基于这个主键建立一个唯一非聚集索引.

二、聚集索引会被应用到每个查询中

一个SQLServer表内,最多只能有一个聚集索引,并且表中数据行存储的位置由聚集索引来决定.表中非聚集索引与数据行的映射,是通过聚集索引来定位的.当聚集索引执行插入操作时,数据表中的行要进行移动,同时该表中所有非聚集索引要重新排列,这是非常消耗资源并且影响SQLServer响应速度的.

所以SQLServer表中的聚集索引一定要避免新添加数据时执行插入操作,保证表中新添加的数据是从索引的尾部追加的.这样做可以保证聚集索引相对静态,对非聚集索引的影响也会减小.

创建聚集索引时,要选择那些数据会不断增加的字段,最好的例子就是bbs发帖表中,帖子发布时间,这个字段中的数据是随时间增长的,理论上讲是不会重复的,最适合建立聚集索引.

如果你的聚集索引真的做到了不断增加,那么它的填充因子就应该是100%,这个数值越高,每个8KB大小的索引页记录的行数就越多,进行相同的扫描时IO、内存和CPU资源就用的越少,换句话说就是查询效率更高.

三、聚集索引的数据类型位宽将影响查询效率

聚集索引列的数据类型位宽越小,查询效率越高,并且由于非聚集索引是依靠聚集索引来影射SQLServer表中数据行的,聚集索引的位宽必将影响表中所有非聚集索引的大小.通常适合作为聚集索引的类型包括:

Smallint,int,bigint,datetimeUNIQUEIDENTIFIER.

 

 

原创粉丝点击