记一次简单的SQL优化
原来的sql是这样写的
SELECT
d.ONSALE_BARCODE,
d.ONSALE_NAME,
c.ONSALE_ID,
CAST(
AVG(c.CUSTOMARY_PRICE) AS DECIMAL (18, 1)
) AS CUSTOMARY_PRICE,
CAST(
AVG(c.CONSTANT_PRICE) AS DECIMAL (18, 1)
) AS CONSTANT_PRICE,
CAST(
AVG(c.RETAIL_ITEM_PRICE) AS DECIMAL (18, 1)
) AS RETAIL_ITEM_PRICE,
CAST(
AVG(c.RETAIL_PACKAGE_PRICE) AS DECIMAL (18, 1)
) AS RETAIL_PACKAGE_PRICE
FROM
yzd_retailer a
LEFT JOIN sur_main b ON a.USER_ID = b.USER_ID
LEFT JOIN sur_main_sail c ON c.SUR_ID = b.SUR_ID
LEFT JOIN ret_on_sale d ON d.ONSALE_ID = c.ONSALE_ID
WHERE
a.RET_AREA IN (01, 10, 20, 30, 40, 50, 60)
AND a.RET_MARKET IN (0, 1)
AND a.RET_TYPE IN (0, 1, 2, 3, 4, 5, 6)
AND a.RET_SCALE IN (0, 1, 2)
AND c.sur_id IS NOT NULL
GROUP BY
c.ONSALE_ID
上面的sql执行需要60S,作为菜鸟的我以为无法优化了。结果在项目里跑的时候会出现504超时。。。让网站维护人员修改超时时间,结果没成功,眼看明天就要交了,这怎么行,于是只能预想着重新写方法了,不靠sql处理了。然而我并没有死心,觉得mysql应该可以再优化吧,不至于这几十万的数据就变得这么慢了,应该是我sql的问题,于是我就想方设法的改sql,突然想到,我应该试试先根据条件把零售户表筛选完,在放入关联查询。于是就做了如下修改
SELECT
d.ONSALE_BARCODE,
d.ONSALE_NAME,
c.ONSALE_ID,
CAST(
AVG(c.CUSTOMARY_PRICE) AS DECIMAL (18, 1)
) AS CUSTOMARY_PRICE,
CAST(
AVG(c.CONSTANT_PRICE) AS DECIMAL (18, 1)
) AS CONSTANT_PRICE,
CAST(
AVG(c.RETAIL_ITEM_PRICE) AS DECIMAL (18, 1)
) AS RETAIL_ITEM_PRICE,
CAST(
AVG(c.RETAIL_PACKAGE_PRICE) AS DECIMAL (18, 1)
) AS RETAIL_PACKAGE_PRICE
FROM
(
SELECT
*
FROM
yzd_retailer
WHERE
RET_AREA IN (01, 10, 20, 30, 40, 50, 60)
AND RET_MARKET IN (0, 1)
AND RET_TYPE IN (0, 1, 2, 3, 4, 5, 6)
AND RET_SCALE IN (0, 1, 2)
) a,
sur_main b,
sur_main_sail c,
ret_on_sale d
WHERE
a.USER_ID = b.USER_ID
AND c.SUR_ID = b.SUR_ID
AND d.ONSALE_ID = c.ONSALE_ID
GROUP BY
c.ONSALE_ID
奇迹发生了,竟然只用了0.5S,真的是惊呆了,这差距也太大了吧。。。
总结:多表查询,在查询条件比较多的情况下,应该先在各个表内做筛选,将筛选之后的结果表再做关联查询。
记一次简单的SQL优化的更多相关文章
- 34条简单的SQL优化准则
转载地址:http://bbs.csdn.net/topics/260002113 我们要做到不但会写SQL,还要做到写出性能优良的SQL,以下为笔者学习.摘录.并汇总部分资料与大家分享!(1) ...
- mysql 简单的sql优化示例[不定时更新]
对于慢sql的分析步骤: 1) desc|explain sql 查看执行计划, 对于type很慢的, 分析是否建立了对应字段的索引 2) 进行排除法, 把子查询抽离出来, 单独执行,定位慢查询是哪个 ...
- 记一次简单的sql注入
什么是sql注入攻击? 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.在某些表单中,用户输入的内容直接用来构造(或者影 ...
- SQL优化:一些简单的又实用的SQL优化方案【转】
面试过程中,面试官有极高的频率会问道数据库的优化,SQL语句的优化,网上关于SQL优化的教程很多,但是鱼目混杂,显得有些杂乱不堪.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请 ...
- 其实SQL优化调优,就跟吃饭喝水一样简单,教你抓住SQL的本质!
前言 SOL 优化并不简单,做好 SOL 优化需要掌握数据库体系结构.表和索引设计.高效 SOL法.高级 SOL 语法.多种优化工具等知识,甚至还得分析业务特点,以及了解优化器的缺点.只有建立 SOL ...
- oracle性能优化(项目中的一个sql优化的简单记录)
在项目中,写的sql主要以查询为主,但是数据量一大,就会突出sql性能优化的重要性.其实在数据量2000W以内,可以考虑索引,但超过2000W了,就要考虑分库分表这些了.本文主要记录在实际项目中,一个 ...
- 记一次SQL优化
常见的SQL优化 一.查询优化 1.避免全表扫描 模糊查询前后加%也属于全表扫描 在where子句中对字段进行表达式操作会导致引擎放弃使用索引而进行全表扫描,如: select id from t w ...
- 提高SQL查询效率(SQL优化)
要提高SQL查询效率where语句条件的先后次序应如何写 http://blog.csdn.net/sforiz/article/details/5345359 我们要做到不但会写SQL,还要做到 ...
- sql优化(oracle)
系统优化中很重要的方面是SQL语句的优化,对于海量数据,优质的SQL能够有效的提高系统的可用性. 总结的有点罗嗦,列个简单的目录啦~ 目录 第一部分知识准备 ...
随机推荐
- Nginx服务器之Nginx与tomcat结合访问jsp
本文使用linux centos系统 本文概述: JSP是一种动态网页技术标准.使用的方式是在HTML文件中插入程序段和JSP标记,而形成JSP文件.使用JSP开发WEB应用可以跨平台开发.但jsp需 ...
- 【CSS3动画】transform对文字及图片的旋转、缩放、倾斜和移动
前言:之前我有写过CSS3的transform这一这特性,对于它的用法,还不是很透彻,今天补充补充,呵呵 你懂的,小司机准备开车了. a)再提一提transform的四个属性 ①旋转--->ro ...
- Atitit 动态按钮图片背景颜色与文字组合解决方案
Atitit 动态按钮图片背景颜色与文字组合解决方案 转换背景颜色,setFont("cywe_img", fontScale, 50, 5) 设置文字大小与坐标 文字分拆,使用字 ...
- 【Win 10应用开发】在RichEditBox中使用自定义菜单
前面给大伙儿简单介绍了RichEditBox控件的基本用法,以及解决其中的一些小问题. 本文咱们来看看如何自定义RichEditBox控件的上下文菜单. 原理比较简单,所以先说一说原理.当RichEd ...
- 【热文】 为什么很多硅谷工程师偏爱 OS X,而不是 Linux 或 Windows?
校对:伯乐在线 - 黄利民 链接: 1. Why do most of the developers in Silicon Valley prefer OS X over Linux or Windo ...
- 两种方式实现java生成Excel
Web应用中难免会遇到需要将数据导出并生成excel文件的需求.同样,对于本博客中的总结,也是建立在为了完成这样的一个需求,才开始去了解其实现形式,并且顺利完成需求的开发,先将实现过程总结于此.本博文 ...
- Spring MVC学习
SpringMVC框架 转载请注明出处 目录 一:配置springMVC开发环境 1.1.配置文件的helloworld 1.2.基于注解的helloworld 二:@RequestMapping详解 ...
- FFmpeg学习3:播放音频
参考dranger tutorial,本文将介绍如何使用FFmpeg解码音频数据,并使用SDL将解码后的数据输出. 本文主要包含以下几方面的内容: 关于播放音频的需要的一些基础知识介绍 使用SDL2播 ...
- ASP.NET Core 中文文档 第三章 原理(13)管理应用程序状态
原文:Managing Application State 作者:Steve Smith 翻译:姚阿勇(Dr.Yao) 校对:高嵩 在 ASP.NET Core 中,有多种途径可以对应用程序的状态进行 ...
- 常用JavaScript触发事件
事件句柄 onclick=JavaScript:鼠标单击某个对象.3 ondblclick=JavaScript:鼠标双击某个对象.3 onmousedown=JavaScript:某个鼠标键被按下. ...