关于SQL优化的一个小试例子
原SQL:
select ta.serialno,
ta.accepttime,
ta.subsnumber,
ta.subsname,
ta.contactphone1,
ta.servicecontent,
ta.address,
r.region_name,
s.contactchannel_name,
p.name,
p.fullname,
rownum
from (select t.serialno,
t.accepttime,
t.subsnumber,
t.subsname,
t.contactphone1,
t.servicecontent,
t.address,
t.contactchannel,
t.srtypeid,
t.partition_id_region
FROM report_threed_problemprocess t,
(select trim(t1.para) p1
FROM System_Parameters_t t1
WHERE t1.para_flag = 'OVER_GONGXINBYCL_TYPE') a,
(SELECT trim(t2.para) p2
FROM System_Parameters_t t2
WHERE t2.para_flag = 'OVER_GONGXINBYCL_CHANNEL') b,
(SELECT TRIM(t3.para) p3
FROM System_Parameters_t t3
WHERE t3.para_flag = 'OVER_96180_TYPE') c
WHERE t.partition_id_month = uf_get_partition_month(201306)
and t.accepttime>=to_date(201306||'01','yyyymmdd') and t.accepttime<add_months(to_date(201306||'01','yyyymmdd'),1)
and t.partition_id_region in
(SELECT rt.ioid_id0 region_id
FROM region_t rt
WHERE rt.region_level = 4
AND rt.ioid_id0 >= 1001
AND rt.ioid_id0 <= 1018)
AND t.srtypeid IN (SELECT spp.srtype_id
FROM sdt_para_pro_com_tsnote spp
WHERE spp.pro_com_id =1025
AND state = 1)
AND ((substr(t.srtypeid, 1, 6) = a.p1 and t.contactchannel = b.p2) or
(substr(t.srtypeid, 1, 6) = c.p3 and t.contactchannel = b.p2))
) ta --96180
inner join sdt_para_contactchannel s
on ta.contactchannel = s.contactchannel
inner join sdt_servicerequesttype p
on ta.srtypeid = p.srtypeid
inner join region_t r
on r.ioid_id0=ta.partition_id_region;
在数据库上的执行时间为:65.969s
改进后的SQL:
select ta.serialno,
ta.accepttime,
ta.subsnumber,
ta.subsname,
ta.contactphone1,
ta.servicecontent,
ta.address,
(SELECT r.region_name FROM region_t r WHERE r.ioid_id0=ta.partition_id_region)region_name,
(SELECT s.contactchannel_name FROM sdt_para_contactchannel s WHERE ta.contactchannel = s.contactchannel) contactchannel_name,
p.name,
p.fullname,
rownum
from (select t.serialno,
t.accepttime,
t.subsnumber,
t.subsname,
t.contactphone1,
t.servicecontent,
t.address,
t.contactchannel,
t.srtypeid,
t.partition_id_region
FROM report_threed_problemprocess t
WHERE t.partition_id_month = uf_get_partition_month(201306)
and t.accepttime>=to_date(201306||'01','yyyymmdd') and t.accepttime<add_months(to_date(201306||'01','yyyymmdd'),1)
AND t.srtypeid IN (SELECT spp.srtype_id FROM sdt_para_pro_com_tsnote spp
WHERE spp.pro_com_id =1025 AND state = 1)
AND
(
(substr(t.srtypeid, 1, 6) =(select trim(t1.para) FROM System_Parameters_t t1 WHERE t1.para_flag = 'OVER_GONGXINBYCL_TYPE')
and t.contactchannel =(SELECT trim(t2.para) p2 FROM System_Parameters_t t2 WHERE t2.para_flag = 'OVER_GONGXINBYCL_CHANNEL')
)
or
(substr(t.srtypeid, 1, 6) =(SELECT TRIM(t3.para) p3 FROM System_Parameters_t t3 WHERE t3.para_flag = 'OVER_96180_TYPE')
and t.contactchannel =(SELECT trim(t2.para) p2 FROM System_Parameters_t t2 WHERE t2.para_flag = 'OVER_GONGXINBYCL_CHANNEL')
)
)
) ta --96180
inner join sdt_servicerequesttype p
on ta.srtypeid = p.srtypeid;
执行时长:9.17s
暂时记这么多。
关于SQL优化的一个小试例子的更多相关文章
- 简单聊聊TiDB中sql优化的一个规则---左连接消除(Left Out Join Elimination)
我们看看 TiDB 一段代码的实现 --- 左外连接(Left Out Join)的消除; select 的优化一般是这样的过程: 在逻辑执行计划的优化阶段, 会有很多关系代数的规则, 需要将逻辑执行 ...
- 关于sql优化的一个小总结
1.数据量大的时候,可以分多次查询2.有些数据的存储可以分主次表,此表存一些不常用的数据3.union all 比union效率要高4.尽量不要用distinct5.不返回不需要的行和列6.根据条件加 ...
- SQL优化 MySQL版 - 避免索引失效原则(二)
避免索引失效原则(二) 注:继上一篇文章继续讲解: 避免索引失效原则(一)https://www.cnblogs.com/StanleyBlogs/p/10482048.html#4195062 作者 ...
- 聊聊sql优化的15个小技巧
前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化sql语句,因为它 ...
- 关于SQL优化的辟谣
列举一些关于 SQL 语句的谣言,避免一些生瓜蛋子面试的时候被另外一群生瓜蛋子的 SQL 优化宝典给坑了. 以下所有内容都是 SQL Server 中的,其他数据库只能参考和借鉴 一.全表扫描 全表扫 ...
- 基于MySQL 的 SQL 优化总结
文章首发于我的个人博客,欢迎访问.https://blog.itzhouq.cn/mysql1 基于MySQL 的 SQL 优化总结 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 ...
- BATJ解决千万级别数据之MySQL 的 SQL 优化大总结
引用 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提高程序性能,还能减低线上故障的概率. 目前常用的 SQL 优化方式包括但不限于:业务层优化.SQL 逻 ...
- SQL优化基础 使用索引(一个小例子)
按照本文操作和体会,会对sql优化有个基本最简单的了解,其他深入还需要更多资料和实践的学习: 1. 建表: 复制代码代码如下: create table site_user ( id int IDEN ...
- sql优化经典例子
场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表 create table Course( c_id int PRIMARY KEY, name varchar(10) ) 数据10 ...
随机推荐
- [原创]oracle 顺序号生成函数。仿Sequence
问题提出自项目中的老代码:一个Bill表,存储所有的表单信息,比如:员工入职单,离职单等等.(别喷,我知道要分多个表.但领导的意愿你是没办法违背的)表单的单据号是以四个字母+年月日+数字顺序号来表示. ...
- kali Linux 文本图形界面切换遇到的怪问题
前段装了在Virtual Box上装一个Kali Linux玩,然后设为了开机进入文本界面,后来遇到无法上网的问题,网上找到解决方法,说是NAT地址转换和host-only双网卡顺序问题,按照网上的说 ...
- hihocoder 1163 博弈游戏·Nim游戏
1163 : 博弈游戏·Nim游戏 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 今天我们要认识一对新朋友,Alice与Bob. Alice与Bob总是在进行各种各样的 ...
- Jquery 获取checkbox的checked问题
这个郁闷了,今天写这个功能的时候发现了问题,上网找了好多资料对照,更加纠结... 事实证明一切,自己测试了N遍,发现网上的说法和自己以前的理解都是错的,不知道大家有没发现. 下面来看看网上大多资料的说 ...
- 【C#4.0图解教程】笔记(第9章~第18章)
第9章 语句 1.标签语句 ①.标签语句由一个标识符后面跟着一个冒号再跟着一条语句组成 ②.标签语句的执行完全如同标签不存在一样,并仅执行冒号后的语句. ③.给语句添加一个标签允许控制从代码的另一部分 ...
- ASP.NET MVC中的统一化自定义异常处理
当ASP.NET MVC程序出现了异常,怎么处理更加规范? 1. 最简单的方法是设置<customErrors/>节点 <customErrors>节点用于定义一些自定义错误信 ...
- MongoDB 的分组操作 In C#
C#对mongodb的分组查询操作,主要通过脚本或Aggregate方法来实现,以下通过一些实例作解析: 参考资料:http://www.tuicool.com/articles/2iqUZj h ...
- asp.net中常用的几种身份验证方式
转载:http://www.cnblogs.com/dinglang/archive/2012/06/03/2532664.html 前言 在B/S系统开发中,经常需要使用"身份验证&q ...
- Android进阶——声波振幅显示
最近博主想做一个app,中间有一个是录音的功能.于是博主想把UI做的好看一些,想仿照微信或者QQ语音输入时,能够随着声音的大小显示声波振幅.于是查找了一些资料,现在把这个功能的Demo分享给大家,以后 ...
- 批量转换word文档到pdf文件
最近在整理每周的工作记录.因为每周的工作记录大都是单独的word文件,有时候忘记了也不容易找出来,一个个打开查找太费劲,因此想着把这些文件通过word2016的另存为功能转换为pdf,然后永Acrob ...