【转】SQL Server索引优化方案

转自:http://blog.csdn.net/ylqmf/article/details/5368903

 

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

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

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

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

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

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

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

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

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

Smallint,int,bigint,datetime UNIQUEIDENTIFIER .

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值