整理通常的SQL SERVER优化流程
1、SQL脚本或存储过程,跟踪存储过程的执行时长和reads,不正常的情况下,表明语句、存储过程有优化空间,通常是未加索引,或者索引的字段升降序进行调用;
A:脚本是否需要新增或复用现有索引;
B:脚本是否可能对排序调整;
C:改写脚本的写法;或者脚本中是否有对大表查询重复数据的情况;
(耗时超过5000ms、或者reads超过10万的情况下,都考虑有优化空间,视实现查询的数据量而定)
D:查看查询分析器中的消息选项卡,是否有表扫描的情形;对哪张表进行了扫描就针对相应的条件做处理;
E:查询时将“包括客户端的实际执行计划”选上,多数情况下会自动给出优化建议;评估频次、收益是否匹配,若匹配则创建索引;若要新建的索引可以在现有索引中扩展复用,则直接使用现有索引进行扩展复用;
F:动态查询语句由于动态构建查询条件的原因,但是通过反写查询条件结合OR,可以将动态条件常规编写。
G:解决执行计划中的KeyLookup,通常是已走索引,但是所需要的字段需要从表中按主键列逐个取出,为相应的索引,新增相关包含性列即可以解决该问题,有一个场景,走索引,Read约202万,加入包含性列后,下降到1500次read。
2、代码:
A:代码是否有遍历中反复调用数据库查询的情形;如果有,在代码层面,将多次查询更改为主查询,然后在程序内部实现分组;
B:对于代码,多表联合一次性查询的性能,要远好于每张表单独查询;