复杂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,严格控制字段的类型,不要使用过大的字段,或者不必要的增大字段长度;
复杂sql优化步骤与技巧的更多相关文章
- SQL优化步骤
当生产数据量急剧增长后,很多SQL语句可能会开始暴露出性能问题.当面对一个有SQL性能问题的数据库时,应该从何处入手进行系统的分析,使得能够尽快定位到问题SQL处并尽快解决问题? 第一步:查看SQL执 ...
- sql优化原则与技巧
加快sql查询是非常重要的技巧,简单来说加快sql查询的方式有以下几种:一.索引的引用 1.索引一般可以加速数据的检索速度,加速表与表之间的链接,提高性能,所以在对海量数据进行处理时,考虑到信息量比较 ...
- 温故知新-Mysql的体系结构概览&sql优化步骤
文章目录 Mysql的体系结构概览 连接层 服务层 引擎层 存储层 存储引擎 存储引擎概述 存储引擎特性
上文( SQL优化之SQL 进阶技巧(上) )我们简述了 SQL 的一些进阶技巧,一些朋友觉得不过瘾,我们继续来下篇,再送你 10 个技巧 一. 使用延迟查询优化 limit [offset], [r ...
随机推荐
- 架构模式: 服务前端的后端(BFF模式)
架构模式: 服务前端的后端(BFF模式) 上下文 让我们假设您正在构建一个使用Microservice体系结构模式的在线商店,并且您正在实现产品详细信息页面.您需要开发产品详细信息用户界面的多个版本: ...
- 【VS开发】CreateThread给线程函数传递的参数
CreateThread给线程函数传递的参数 HANDLE WINAPI CreateThread ( __in_opt LPSECURITY_ATTRIBUTES lpThreadAttribu ...
- day33 网络编程之UDP与进程了解
UDP 什么是UDP协议 在上节课的练习中,使用TCP进行网络编程时,我们会遇到粘包问题,这是因为TCP是流式协议,而今天学习的UDP协议不是流式协议,其发送的数据是数据报格式的,在进行数据发送时该协 ...
- [官网]mono的官方安装方法
mono 官方的安装方法 https://www.mono-project.com/download/stable/#download-lin-centos Download Release chan ...
- linux用户和组 只 组的管理
1. groupadd 新建组, 组名最长不能超过32个字节 groupadd -create a new group 语法: groupadd [option] 组名 -g, --gid GID ...
- Jboss: Using reverse path on top path: /xxx
环境 jboss 5.2 原因 加载资源的协议错误.一般在加载文件的时候,URL 都是以 file: 开头,但是在 jboss 上时,由于其虚拟化了路径,导致协议不一致,并且找不到外部的配置文件. 分 ...
- Web安全微专业正式课 大纲(图片)
如果想报名学习,可以联系我.QQ:1097321785.
- drf序列化及反序列化
假如把drf看做一个汉堡包,我们之前讲的模块属于汉堡包前面的盖盖(请求模块.渲染模块)和底底(异常模块.解析模块.响应模块),但是真正中间的夹心没有讲,那么今天我就和大家来看一下汉堡包的夹心(序列化及 ...
- pytest参数化的两种方式
1.传统方式 import requests,pytest from Learning.variable import * # 定义变量 #url = "https://www.baidu. ...
- Graph、DFS、BFS
Graph.java package Graph; import LinearLIst.bag.Bag; import edu.princeton.cs.algs4.In; public class ...