jackyrong

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
新看了《MSDN精选》05年第4期,发现其中的《应用索引技术优化SQL语句》一文写的不错,推荐大家阅读。其中对sql server 2000中的索引的使用,执行情况等做了较全面的分析,下面总结归纳其中的重要几点。

1 逻辑读问题。创建索引尽量要减少语句的logic reads.logic reads是指语句执行时需要访问单位为8K的数据页总数,logic reads越少,其需要的内存和CIP时间越少,执行速度越快。
   在执行sql语句前,可以用set statistics io命令看到起逻辑读的次数。

2 对出现在where子句中的字段加索引,尽可能减少TABLE SCAN(全表扫描),使其变为index scan.可以
用set statistics profile来看到执行SQL语句的计划,知道是否是table scan或是index scan.

3 组合索引
   比如select  学生姓名,入学时间 from xxx where 入学时间>='20050601' and 入学时间<='20051201' and 年龄>24
    可以在入学时间和年龄上建立一个组合索引,组合的顺序为(入学时间,年龄),
另外,尽量不要选择那些唯一性很低的字段,比如,在性别字段上建立索引没多大意义

4 覆盖索引。覆盖索引能是语句不需要访问表仅访问索引就能得到所要的数据。当在SQL语句执行计划中,如果发现有bookmark lookup的话,就表示为访问一行数据,起码要两次IO,一次访问索引,一次访问基本表。要创建覆盖索引,必须包含select 子句和where子句出现的所有字段,where字段在前,select字段在后
  create nonclustered index idx_covered on xxx(入学时间,年龄,学生姓名)
     对那些非常唯一的字段如主键和外键,经常出现在group by,order by等字段应创建索引
5 尽量不要对where语句中的字段值直接使用各类函数表达式,要尽可能把函数或表达式放在操作符的右边。

  
posted on 2005-08-25 19:42  jackyrong的世界  阅读(997)  评论(0编辑  收藏  举报