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?