SQLServer 聚集索引优化方案

本文探讨了SQLServer中聚集索引与主键的关系、聚集索引对查询效率的影响及如何选择最佳的聚集索引字段等问题。介绍了聚集索引与主键并非总是对应关系,并解释了如何设置聚集索引以提高查询效率。

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

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

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

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

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

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

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

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

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

Smallint,int,bigint,datetimeUNIQUEIDENTIFIER.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值