数据管理型系统,由于用户的要求或者系统设计要求,会出现大量表进行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. 冒泡排序到demo

    package com.lmy.demoSort; /** * 冒泡排序demo * @author Yubaba * */ public class BubbleSort { public stat ...

  2. 【miscellaneous】单播、广播和多播IP地址

    转自:http://www.cnblogs.com/gaoxing/archive/2012/02/19/2358484.html 除地址类别外,还可根据传输的消息特征将IP地址分为单播.广播或多播. ...

  3. FTL-SLC&MTC&TLC

    1.博客 SLC.. http://diybbs.zol.com.cn/67/231_661182.html 2.FTL --作者在普及了一些FTL基本知识后,主要分析了在linux上实现的途径 ht ...

  4. [转帖]12条用于Linux的MySQL/MariaDB安全最佳实践

    12条用于Linux的MySQL/MariaDB安全最佳实践 2018-01-04 11:05:56作者:凉凉_,soaring稿源:开源中国社区 https://ywnz.com/linuxysjk ...

  5. Android笔记01--手机振动

    一.android任务栈  不懂? 栈:先进后出 队列:先进先出 任务栈Task中:打开一个Activity叫进栈 关闭一个activit出栈 任务栈是用来维护Activity的.是用来维护用户的操作 ...

  6. dubbo分布式服务框架-study1

    本文参考“如何给老婆解释RPC”一文进行的... 1.首先了解下dubbo: dubbo是一款高性能.轻量级的开源java RPC服务框架(RPC即远程过程调用,具体解释见:https://www.j ...

  7. NOIP模拟赛 打铁的匠 题解

    [问题描述] Mark Douglas是一名优秀的锻造师.与他优秀的锻造水平不相符,他非常穷,以至于很多好刀都因为缺少素材缺少资金无法打造. Mark把他有能力锻造的所有n种刀建成了一棵锻造树,除了第 ...

  8. Yii2.0 组件

    框架之所以是框架,是因为其强大,其封装了很多实用的功能,开发者可以开箱即用. 下边列举Yii2.0的部分组件: var_dump(Yii::$app->session->getId()); ...

  9. 一个非常好用的php后台模板

    http://www.h-ui.net/H-ui.admin.shtml

  10. 老贾的幸福生活day3 之markdown常用语法简要

    1.markdown常用语法 标题 一级到六级 用#+空格实现 2.代码块 3个 `实现 python is a ...... 单行代码,用"``" 3.列表 有序列表 跟内容 数 ...