zoukankan      html  css  js  c++  java
  • 复杂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,严格控制字段的类型,不要使用过大的字段,或者不必要的增大字段长度;

  • 相关阅读:
    第三周作业
    第二周作业
    第一周作业
    预备作业3
    预备作业2
    预备作业01
    ## 20155336 2016-2017-2《JAVA程序设计》第十周学习总结
    20155336 2016-2017-2《JAVA程序设计》第九周学习总结
    ## 20155336 2016-2017-2《JAVA程序设计》第八周学习总结
    20155336 2016-2017-2《JAVA程序设计》第七周学习总结
  • 原文地址:https://www.cnblogs.com/Tpf386/p/6709310.html
Copyright © 2011-2022 走看看