SQLServer 维护索引实现查询优化
2010-03-10 16:06
357 查看
索引分为两大类:聚集索引和非聚集索引
一、聚集索引
当数据表中的一列被确定为主键后,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%的填充因子.
一、聚集索引
当数据表中的一列被确定为主键后,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%的填充因子.
相关文章推荐
- 建立“适当”的索引是实现查询优化的首要前提
- Mysql使用索引实现查询优化
- SQL Server 查询优化之二_索引的遍历与维护
- SQL Server 查询优化(2)_索引的遍历与维护
- Mysql使用索引实现查询优化
- Mysql使用索引实现查询优化
- 记录一次SqlServer查询优化的过程(聚合索引的使用)
- SQLServer性能优化--间接实现函数索引或者Hash索引
- SqlServer性能优化 查询和索引优化(十二)
- sqlserver索引与查询优化
- MySQL索引原理及慢查询优化
- SQLSERVER索引的维护
- MySQL查询不使用索引汇总 + 如何优化sql语句
- 在SQLite中使用索引优化查询速度
- 大批量数据查询优化--建立索引
- (转)提高mysql千万级大数据SQL查询优化30条经验(Mysql索引优化注意)
- mysql性能优化-慢查询分析、优化索引和配置
- 浅析TPCH对查询Q4的优化-正确改写子查询与强制使用索引优化
- 阅读笔记-MySQL索引原理及慢查询优化
- sqlserver中如何实现时间按月,日,小时分组查询