数据管理型系统,由于用户的要求或者系统设计要求,会出现大量表进行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,严格控制字段的类型,不要使用过大的字段,或者不必要的增大字段长度;

复杂sql优化步骤与技巧的更多相关文章

  1. SQL优化步骤

    当生产数据量急剧增长后,很多SQL语句可能会开始暴露出性能问题.当面对一个有SQL性能问题的数据库时,应该从何处入手进行系统的分析,使得能够尽快定位到问题SQL处并尽快解决问题? 第一步:查看SQL执 ...

  2. sql优化原则与技巧

    加快sql查询是非常重要的技巧,简单来说加快sql查询的方式有以下几种:一.索引的引用 1.索引一般可以加速数据的检索速度,加速表与表之间的链接,提高性能,所以在对海量数据进行处理时,考虑到信息量比较 ...

  3. 温故知新-Mysql的体系结构概览&sql优化步骤

    文章目录 Mysql的体系结构概览 连接层 服务层 引擎层 存储层 存储引擎 存储引擎概述 存储引擎特性![存储引擎特性对比](https://img-blog.csdnimg.cn/20200510 ...

  4. MS Sql 优化步骤及优化not in一例

    今天接到客户投诉说系统卡死了,经过一翻努力,终于解决了.现将解决步骤记录一下,以便下次参考: 因为客户系统集中在阿里云上面,使用的是ms sql2008数据库,上面有N个客户,一下子无法知道是哪个客户 ...

  5. MySQL架构优化实战系列4:SQL优化步骤与常用管理命令

  6. SQL优化技巧

    我们开发的大部分软件,其基本业务流程都是:采集数据→将数据存储到数据库中→根据业务需求查询相应数据→对数据进行处理→传给前台展示.对整个流程进行分析,可以发现软件大部分的操作时间消耗都花在了数据库相关 ...

  7. 常用的7个SQl优化技巧

    作为程序员经常和数据库打交道的时候还是非常频繁的,掌握住一些Sql的优化技巧还是非常有必要的.下面列出一些常用的SQl优化技巧,感兴趣的朋友可以了解一下. 1.注意通配符中Like的使用 以下写法会造 ...

  8. 梁敬彬老师的《收获,不止SQL优化》,关于如何缩短SQL调优时间,给出了三个步骤,

    梁敬彬老师的<收获,不止SQL优化>,关于如何缩短SQL调优时间,给出了三个步骤, 1. 先获取有助调优的数据库整体信息 2. 快速获取SQL运行台前信息 3. 快速获取SQL关联幕后信息 ...

  9. SQL优化之SQL 进阶技巧(下)

    上文( SQL优化之SQL 进阶技巧(上) )我们简述了 SQL 的一些进阶技巧,一些朋友觉得不过瘾,我们继续来下篇,再送你 10 个技巧 一. 使用延迟查询优化 limit [offset], [r ...

随机推荐

  1. lua学习笔记2--table

    table是lua中的一种"数据/代码结构",可以用俩创建不同的"数据类型"lua语言中的数组其实就是table类型 array = {, , , , } pr ...

  2. Leetcode之动态规划(DP)专题-122. 买卖股票的最佳时机 II(Best Time to Buy and Sell Stock II)

    Leetcode之动态规划(DP)专题-122. 买卖股票的最佳时机 II(Best Time to Buy and Sell Stock II) 股票问题: 121. 买卖股票的最佳时机 122. ...

  3. HBASE概念补充

    HBASE概念补充 HBase的工作方式: hbase中的表在行的方向上分隔为多个HRegion,分散在不同的RegionServer中 这样做的目的是在查询时可以将工作量分布到多个RegionSer ...

  4. 前端内容之CSS层叠样式表

    CSS(Cascading Style Sheet层叠样式表) 把HTML认为是网页的骨架 那么CSS就是用于对HTML骨架进行修饰,比如加背景色.显示方式.位置等等属性 CSS语法形式: 一个完整的 ...

  5. ZOJ Problem Set - 1007

    1.参考这个吧,一道数学公式题,还没看懂...好像需要把公式变形出来,先略过. http://dengbaoleng.iteye.com/blog/1504940

  6. Linux文件属性之软硬连接知识深度详解

    一.链接的概念 在Linux系统中,链接可分为两种:一种为硬链接(Hard Link),另一个位软连接或符号链接(Symbolic Link or link).我们在前面讲解过ln这个命令就是创建链接 ...

  7. Mac 操作小技巧

    系统版本 MacOs Mojava # 快捷键篇: 1. 打开终端:command+空格,输入terminal:在终端页面,新建终端command + T 2. 打开文件夹:command + T 3 ...

  8. [转帖]开始使用Chronograf

    地址:https://docs.influxdata.com/chronograf/v1.6/introduction/getting-started/ https://www.cnblogs.com ...

  9. [转帖]字符编码笔记:ASCII,Unicode 和 UTF-8

    字符编码笔记:ASCII,Unicode 和 UTF-8 http://www.ruanyifeng.com/blog/2007/10/ascii_unicode_and_utf-8.html 转帖 ...

  10. Ruby Rails学习中:关于测试的补充,MiniTest报告程序,Guard自动测试

    一. 关于测试的补充 1.MiniTest报告程序 为了让 Rails 应用的测试适时显示红色和绿色,我建议你在测试辅助文件中加入以下内容: (1).打开文件:test/test_helper.rb ...