原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优化的一个小试例子的更多相关文章

  1. 简单聊聊TiDB中sql优化的一个规则---左连接消除(Left Out Join Elimination)

    我们看看 TiDB 一段代码的实现 --- 左外连接(Left Out Join)的消除; select 的优化一般是这样的过程: 在逻辑执行计划的优化阶段, 会有很多关系代数的规则, 需要将逻辑执行 ...

  2. 关于sql优化的一个小总结

    1.数据量大的时候,可以分多次查询2.有些数据的存储可以分主次表,此表存一些不常用的数据3.union all 比union效率要高4.尽量不要用distinct5.不返回不需要的行和列6.根据条件加 ...

  3. SQL优化 MySQL版 - 避免索引失效原则(二)

    避免索引失效原则(二) 注:继上一篇文章继续讲解: 避免索引失效原则(一)https://www.cnblogs.com/StanleyBlogs/p/10482048.html#4195062 作者 ...

  4. 聊聊sql优化的15个小技巧

    前言 sql优化是一个大家都比较关注的热门话题,无论你在面试,还是工作中,都很有可能会遇到. 如果某天你负责的某个线上接口,出现了性能问题,需要做优化.那么你首先想到的很有可能是优化sql语句,因为它 ...

  5. 关于SQL优化的辟谣

    列举一些关于 SQL 语句的谣言,避免一些生瓜蛋子面试的时候被另外一群生瓜蛋子的 SQL 优化宝典给坑了. 以下所有内容都是 SQL Server 中的,其他数据库只能参考和借鉴 一.全表扫描 全表扫 ...

  6. 基于MySQL 的 SQL 优化总结

    文章首发于我的个人博客,欢迎访问.https://blog.itzhouq.cn/mysql1 基于MySQL 的 SQL 优化总结 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 ...

  7. BATJ解决千万级别数据之MySQL 的 SQL 优化大总结

    引用 在数据库运维过程中,优化 SQL 是 DBA 团队的日常任务.例行 SQL 优化,不仅可以提高程序性能,还能减低线上故障的概率. 目前常用的 SQL 优化方式包括但不限于:业务层优化.SQL 逻 ...

  8. SQL优化基础 使用索引(一个小例子)

    按照本文操作和体会,会对sql优化有个基本最简单的了解,其他深入还需要更多资料和实践的学习: 1. 建表: 复制代码代码如下: create table site_user ( id int IDEN ...

  9. sql优化经典例子

    场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表 create table Course( c_id int PRIMARY KEY, name varchar(10) ) 数据10 ...

随机推荐

  1. Java ServletContext 详解

    ServletContext, 是一个全局的储存信息的 空间,服务器开始,其就存在,服务器关闭,其才释放.request,一个用户可有多个:session,一个用户一个:而 servletContex ...

  2. 微软雅黑字体IE6 opacity改变,字体会变样子

    微软雅黑字体IE6 opacity改变,字体会变样子,换个字体就好了

  3. iOS9横竖屏设置的处理方法

    在一般的视频类APP播放的时候都会支持横屏,这样做的好处就是便于观看.你的项目中支持横屏吗?我们一起了解一下,在iOS9中横竖屏设置的处理方法吧! 支持横竖屏配置 在iOS6以后,如果APP需要支持横 ...

  4. Google(谷歌)中国工程研究院 工程师 方坤 对学生朋友的一些建议

    对学生朋友的一点建议 发表者:Google(谷歌)中国工程研究院工程师 方坤 自去年春天加入谷歌,我曾多次随公司校园招聘团队一起走访各地院校,帮助公司发掘人才 .利用这样的出差机会到处走走看看,饱览祖 ...

  5. javascript笔记06:类的创建

    1.创建一个javascript类---javascript使用函数形式构建类 <script type="text/javascript">  //定义一个类     ...

  6. (转)fastdfs_v4.07 / 实现多服务器

    http://my.oschina.net/shking/blog/165326 自己闲着没事,在小黑上虚拟了 4 个 centos 64 的系统,用来安装分布式 fastdfs . nginx 负载 ...

  7. Gmail账户安全冰山一角

    本文没有任何价值,只是一个事实的记录. 看到qq邮箱有个代理其他邮箱的功能,就好奇地输入了我的Gmail邮箱,结果代理不成功. 本来没care,后来gmail自己弹出来一封邮件. 后来我确认是本人所为 ...

  8. monkey与monkeyrunner的使用

    什么是Monkey Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中.它向系统发送伪随机的用户事件流(如按键输入.触摸屏输入.手势输入等),实现对正在开发的应用程序进行压 ...

  9. 获取iframe 内元素的方法

    1,原生的方法 首先给iframe 设置 id 属性 var obj = document.getElementById('iframe').contentWindow; setTimeout(fun ...

  10. MVC 表单提交提示:已添加了具有相同键的项。

    MVC:页面提交的时候报如下错误: 解决方案: 这个Model 里面定义了重复的字段so~~~