• 复杂sql优化步骤与技巧


         数据管理型系统,由于用户的要求或者系统设计要求,会出现大量表进行join,还要进行大量统计性数据查询展示,甚至数据权限控制等操作。最后会导致sql异常复杂,随着数据量增加,或者只是应用到生产环境(正式环境)就会出现系统反应慢,体验差的现象,这个时候不得不对这些,复杂的sql进行优化。没有经验的程序员会感觉无从下手,这么复杂的sql语句看一眼就头疼,该怎么办呢?

        根据个人的工作经验提供一下优化步骤:

    首先要对sql语句进行格式化,使sql条理清晰,甚至分步骤添加注释,弄清楚每个步骤是为了得到什么;

    第二步,用第一部格式化过的sql与最终需求做对比,没有用的表,就不要进行join了,没有用的字段也不要进行返回了。

    第三步,分模块检查子查询,到底是哪个表查询速度慢,或者哪个条件导致的查询速度慢。

    第四步,配合sql执行计划,这个由于自己也不擅长看执行计划,只能尽量避免全表扫描,提前限制sql数据筛选范围。

    第五步,检查是否用了不合适的in查询,过量的in会导致效率骤然降低很多。

    第六步,检查是否存在过多的or查询,or会导致全表扫描,能避免尽量避免。

    第七步,检查子查询是否过于复杂,或者sql处理是否过于复杂,如果可以将复杂处理放到程序中进行。

    第八步,可以用exists替代的地方,用exists进行替代。

    第九步,可以建视图,对sql进行简化,至于视图是否可以提高查询效率,我也不知道,还需要学习研究。

    以上步骤准确的说,是可以采取的方法,除了前几条,其他的没有先后顺序。

    这些心得是在老大指导进行sql优化时的心得,记录下来既可以总结自己的收获,也希望能与大家的观点碰撞,相互进步!

    -----------------------------------------

    2018-05-08  更新

    自己进行sql速度优化时的感悟心得。

    建表时注意:

    1,不要用判断值的方法,代替状态字段,建表时应该建状态字段,不能省略;

    因为用判断某个字段的值判断状态,可能需要使用转换函数或者isNull判断,会影响查询速度。

    2,应该在程序中保持数据的一致性,而不是使用sql,防止查询时可能需要or判断,or判断会影响sql查询速度;

    3,严格控制字段的类型,不要使用过大的字段,或者不必要的增大字段长度;

  • 相关阅读:
    JavaScript实现继承机制(4)——构造函数+原型链混合方式
    NodeJS”热部署“代码,实现动态调试
    初识NodeJS,一个基于GoogleV8引擎的Javascript运行环境
    那些你不得不知道的JavaScript 变量命名规则
    JavaScript声明全局变量的三种方式
    JavaScript实现继承机制(3)——通过原型链(prototype chaining)方式
    JavaScript实现继承机制(1)—— 构造函数方法对象冒充
    C# readonly和const
    C# winform增加界面动态加载的流畅性
    C# 正确操作字符串,规避字符串转换所带来的额外开销
  • 原文地址:https://www.cnblogs.com/Tpf386/p/6709310.html
Copyright © 2020-2023  润新知