1. 没有适用一切的定律;
2. 分析方法:执行计划、IO信息和时间信息
3. 索引:

  覆盖非聚簇索引》聚簇索引》非覆盖非聚簇索引》表扫描
4. 连接方法:Nested lookup, Merge join, Hash Join
5. scan vs seek:如何化scan为seek
6. select into vs insert select
7. 控制执行顺序:拆分,括号,hint
8. 原则:最先应用最有效的过滤/连接

9. 具体问题:化scan为seek,错误的估值,错误的连接算法,Timeday

 

最佳实践:

1. 使用面向集合的编程;

  尽量避免使用游标;

2. 为优化器提供统计信息;

  尽可能开启所有数据库的AUTO_UPDATE_STATISTICS选项;

3. 避免不必要的复杂;

  优化器对连接的处理比对多层的group by子句或子查询的处理要好的多;

  对于聚集、标量表达式、UDF、和多重语句TVF,优化器不能轻松估计有效行的数量和数据分布情况;

  如果查询会使用标量表达式过滤结果,请为标量表达式创建计算列;

  如果可能,把复杂查询或结构作为查询的最后一步。计划前期的估计错误将会影响后续操作的选择;

  将复杂查询拆分成多步查询,在临时表中存储中间结果;

 

当我们set statistics time on之后,我们应该关注的指标是什么,是CPU time,还是elapsed time?

posted on 2010-09-01 16:04  风生水起  阅读(312)  评论(0编辑  收藏  举报