首页 > 技术文章 > 整理通常的SQL SERVER优化流程

soleds 2019-08-23 17:58 原文

1、SQL脚本或存储过程,跟踪存储过程的执行时长和reads,不正常的情况下,表明语句、存储过程有优化空间,通常是未加索引,或者索引的字段升降序进行调用;

  A:脚本是否需要新增或复用现有索引;

       B:脚本是否可能对排序调整;

       C:改写脚本的写法;或者脚本中是否有对大表查询重复数据的情况;

  (耗时超过5000ms、或者reads超过10万的情况下,都考虑有优化空间,视实现查询的数据量而定)

  D:查看查询分析器中的消息选项卡,是否有表扫描的情形;对哪张表进行了扫描就针对相应的条件做处理;

  E:查询时将“包括客户端的实际执行计划”选上,多数情况下会自动给出优化建议;评估频次、收益是否匹配,若匹配则创建索引;若要新建的索引可以在现有索引中扩展复用,则直接使用现有索引进行扩展复用;

  F:动态查询语句由于动态构建查询条件的原因,但是通过反写查询条件结合OR,可以将动态条件常规编写。

  G:解决执行计划中的KeyLookup,通常是已走索引,但是所需要的字段需要从表中按主键列逐个取出,为相应的索引,新增相关包含性列即可以解决该问题,有一个场景,走索引,Read约202万,加入包含性列后,下降到1500次read。

2、代码:

        A:代码是否有遍历中反复调用数据库查询的情形;如果有,在代码层面,将多次查询更改为主查询,然后在程序内部实现分组;

  B:对于代码,多表联合一次性查询的性能,要远好于每张表单独查询;

 

推荐阅读