SQLServer 维护索引实现查询优化

本文详细介绍了SQL Server中的两种主要索引类型:聚集索引和非聚集索引,并讨论了影响查询优化器选择索引的因素,包括高碎片率、唯一性、使用函数查询以及查询错误的字段等。

索引分为两大类:聚集索引和非聚集索引

一、聚集索引

当数据表中的一列被确定为主键后,SQLServer会自动为它建立聚集索引,因为聚集索引是标识每个记录行的键,所以它将被应用到每个查询中.

二、非聚集索引

非聚集索引的情况就比较复杂了,因为它是相对于表独立组织的,SQLServer中有单独的结构来存储非聚集索引.

有一点是要注意的,不要代替查询优化器去指定某个索引,DBA应该想办法避免优化器不使用索引进行查询:

1、高碎片率

当索引碎片率超过40%的时候,优化器会放弃使用索引,因为在碎片率如此高的索引中扫描数据还不如直接到表中去扫描.

DBA应该常常监视索引碎片率,当达到30%的时候就要考虑重新组织索引

2、唯一性

如果一个索引不是唯一索引,那么优化器会认为直接到数据表中扫描比使用这个索引的效率要高

3、查询中使用了函数

当查询中使用了函数时,在该列上建立的索引是不会被使用的.

例如:col建立了索引,但是在查询中使用了 convert(nvarchar,col)=test,这时查询优化器不会使用该索引

4、查询错误的字段

如果建立组合字段的索引,那么只有当第一个列被查询使用时,该索引才会被使用

例如:建立一个索引(col1,col2,col3),当查询中使用col2=test时索引不会被使用.只有col1=test这样的查询,这个索引才会被使用

如果你想对col3查询时使用索引,那么只能建立两个索引,一个建立在col1,另一个建立在col3

另外一个要注意的是,非聚集索引与聚集索引不同,聚集索引填充因子为100%并且没有碎片,因为数据时顺序追加的.非聚集索引要考虑到数据填充时,索引页填充因子.

在重建索引时还要根据前一阶段的监视重新设定填充因子.一般的情况是70%-80%,我最低使用过65%的填充因子.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值