zoukankan      html  css  js  c++  java
  • SQL优化小结

    一 背景
         客户数据库经常出现死锁、超时、查询慢等问题,数据库mssql,数据量主要表大概上千W。
    二 收集信息
         首先是要找出IO大、查询慢、使用频率高的脚本。直接用Profiler加上限制条件在生产环境收集了。
    三 辅助脚本
          DMV动态管理视图是必不可少的。还有其他一些命令用来如
          1 set statistics io on 查看IO
          2 set statistics time on 查看时间
         3 dbcc freeproccache 删除计划缓存(正式环境慎用)
         4 dbcc dropcleanbuffers 清除缓冲区(正式环境慎用)
         5 set statistics profile on查看执行计划,当然也可以用图形的
         6 select identity(bigint, 1, 1) AS RowNumber,* into my_trace from fn_trace_gettable('C:20141031.trc', default) 把跟踪信息导入表中,方便统计查看
    四 优化方式
         首先一般语句是先看执行计划,大的存储过程就在代码断前后插入时间如 print convert(varchar(30),getdate(),121),优化大体从技术和业务两方面入手(不考虑换硬件)。在不同数据量环境下,执行计划的表现是不同的,所以要具体问题具体分析,没有绝对最优。
         1 参数嗅探问题
         2 避免adhoc(即席查询)
         3 是否缺少必要的索引,有索引但没走索引,尽量把scan优化成seek
         4 语句写法是否合理,尽量只查询想要的
         5 临时表和表变量合理使用
         6 触发器尽量少用
         7 业务是否可以优化
         8 查询条件,尽量别在查询条件里用自定义函数,查询条件左边不要做计算
    五 总结
         经过这次优化,对DMV,执行计划等有了初步了解,其中看MSDN、SQL大牛博客对自己进步很有帮助,理论结合实际这样印象会比较深刻。
  • 相关阅读:
    为什么包含多句代码的宏要用do while包括起来?
    Android之JUnit深入浅出
    android unit test
    dlopen,dlsym的问题,实在搞不明白了。
    pthread多线程学习笔记五条件变量2使用
    posix多线程程序使用条件变量的一个常见bug
    Android Bitmap和Canvas学习笔记
    c++filt
    pthread_cond_signal只能唤醒已经处于pthread_cond_wait的线程
    百度知道推广技巧大全
  • 原文地址:https://www.cnblogs.com/xqhppt/p/4216516.html
Copyright © 2011-2022 走看看