一周工作总结–左连接造成的一些问题

今天有同事告诉我,有个SQL执行了好久好久执行不出来,我说好就是多久?她说一天左右了。真是令人咋舌的SQL。于是我要来了SQL看了看执行计划,确实让人咋舌。

下图中就是执行计划的截图:

25G的COST和75T的Bytes确实是无法承受之重。这个SQL是这样子的:

select部分做了很多sum运算,还有distinct等运算,总之很麻烦,group by部分就是上面的维度。其中最大的表是TABLE3和TABLE4,这两个表所需要查询的数据量都在3G以上,各自差不多3000万数据。

最开始我以为是因为数据量大的原因导致的这个执行计划不可实现,但是在我将TABLE3和TABLE4的相应数据进行压缩后,数据量尽管各自降低到了1G左右,但是执行计划基本上没有改变,这不是我要的效果,于是我注意到了执行计划中红色框中的部分。是不是这里导致了问题的发生?于是我开始检视SQL,就发现了一个问题:TABLE4实际上只有201302的数据,但是为什么这里还需要在左连接的时候写上月份标识,这个比较不合理,而且根据我以往的经验判断,左连接或者右连接的时候,如果and条件写的太多,往往会影响执行计划,导致SQL长久的无法得到结果。于是我做了一个很简单的事情,就是把TABLE4的month_id部分去掉,后来我又进了一步,将TABLE3的month部分也去掉了,这是一个分区表,于是我用了这个办法:

left join TABLE3 partition(part_02),这样即实现了减少and条件的目的,又不会影响数据准确的效果,一举两得。在进行了相关的优化之后,执行计划变成了这个样子:

可以看到执行计划发生了翻天覆地的变化,直接能看到的就是少了NESTED LOOPS OUTER,取而代之的是图中1部分和2部分的HASH JOIN OUTER和TABLE1的HASH JOIN OUTER,这是我喜欢看到的事情,我就喜欢看到简单的执行计划。虽然这个COST依旧很大,但是我实在不想动弹了,这个的数据量实在是太巨大了,我面对的优化工作难度已经无法让我有精力想过去那样,仔细研究思考,然后把COST弄到几千或者更小的程度了,就这样吧,天要下雨,娘要嫁人,随他去吧。

我以前看到论坛上或者书上都在写,如果你的表超过1G,那么最好进行分区,这句话现在我深有体会,如果没有分区表,这个SQL也没有办法优化了(或者说我就没有能力去优化了),因为没有办法去掉month的条件,除非是将特定月份的数据取出来建立一个中间表,不过那么做似乎有点麻烦了,不符合我一贯喜欢写短代码的习惯。

oracle左连接数据会对不上吗,一周工作总结–左连接造成的一些问题-Oracle相关推荐

  1. Oracle PLSQL 导出数据table xx contains one or more CLOB columns 解决方案

    Oracle PLSQL 导出数据table xx contains one or more CLOB columns 解决方案 参考文章: (1)Oracle PLSQL 导出数据table xx ...

  2. oracle连接外部数据库_使用Oracle验证外部数据

    oracle连接外部数据库 我经常在Corda Slack频道中闲逛,并尽可能回答问题. 我尝试回答的合理数量的问题与Oracle有关. 更具体地说,何时使用. 我觉得我可以回答,"当您需要 ...

  3. SQL左连接或者右连接数据变少

    SQL左连接或者右连接数据变少: 主要看这两篇文章就可以: https://blog.csdn.net/lz_peter/article/details/83185909 https://blog.c ...

  4. oracle中的数据集合操作

    一.数据更新操作 DML语法中主要包括两个内容:查询与更新,更新主要包括:增加数据.修改数据.删除数据.其中这些操作是离不开查询的.         1.增加数据 语法:INSERT INTO 表名称 ...

  5. oracle不同库之间传送文件,EXCEL与ORACLE间的数据互传法数据库 -电脑资料

    众所周知,MicrosoftExcel能很直观而方便地进行数据输入,统计,生成图表,但它的数据管理能力有限,对大量的数据查询能力不足,如果利用它数据计算方面的优点和大型 数据库 ORACLE的数据查询 ...

  6. oracle tns 代理配置_OGG实现Oracle到MySQL数据平滑迁移

    技术分享 | 使用OGG实现Oracle到MySQL数据平滑迁移 - 爱可生开源社区​opensource.actionsky.com 一.OGG概述 OGG全称为Oracle GoldenGate, ...

  7. oracle导出对象和数据,浅析Oracle对象和数据的导入导出

    对于Oracle对象和数据的导入导出,我们会用到一些小工具.以前我们一般都是使用PL/SQL Developer来实现,但是PL/SQL Developer在导出.导入数据时有两个问题: 1.要把表数 ...

  8. oracle怎么将一列挪到另一列,详细讲解Oracle数据库的数据迁移方法

    <详细讲解Oracle数据库的数据迁移方法>由会员分享,可在线阅读,更多相关<详细讲解Oracle数据库的数据迁移方法(4页珍藏版)>请在人人文库网上搜索. 1.详细讲解 Or ...

  9. c 导入数据到oracle,excel中数据导入到Orcale数据库表中的方法 | 学步园

    最近我们要做产品的测试,由于里面的数据量太少,上头要我往数据库的表里加上10000条记录.我想如果一条一条地往里加,还不要几个月呀,人也要被累死.所以,我很快地就想到了利用工具加. 就上网搜索,大多介 ...

最新文章

  1. 优化 Web 服务器计算机和特定应用程序的配置文件以符合您的特定需要
  2. java代码运行linux shell操作
  3. firebird 3.0 开发者指南_11月19日召开 2020 vivo开发者大会报名正式开启
  4. 啥操作?男子改装路边电话亭玩游戏 中国电信回应将核实该情况
  5. 【MySQL】MySQL 中的函数
  6. linux模块builtin是什么意思,Linux命令手册
  7. 【java基础 3】树形结构数据呈现的递归算法实现
  8. 关于vs2015无法启动iis服务
  9. gc buffer busy release
  10. HTB-oscplike-Bounty+Jerry+Conceal
  11. 20位顶级设计师的桌面环境
  12. SQL达梦数据库迁移
  13. 链表、数组、跳表时间复杂度
  14. 如何用一个makefile编译多个目标
  15. 【英文】Node.js Streams: Everything you need to know //转载
  16. Nodejs下载与安装(官网选择)
  17. 车辆检测(视觉分类器训练)
  18. 博尔赫斯-诗中的经典语段
  19. html大二实训大作业:蛋糕甜品网站设计——棕色蛋糕甜品店网页设计(4页) HTML+CSS+JavaScript HTML5期末大作业 web网页设计制作成品
  20. VS2017使用NuGet安装Oracle.ManagedDataAccess.EntityFramework 的异常解决

热门文章

  1. c语言编程安全队列,C语言编程队列的实现
  2. mysql 移植ucos_基于STM32F767的UCOSIII移植学习
  3. a标签居中 img vue,让html img图片垂直居中的三种方法
  4. Android之canvas详解
  5. 汇编语言 test 和 cmp 区别
  6. linux配置redis服务,Linux下安装Redis并设置相关服务
  7. java邮箱_java发送邮件(qq邮箱)
  8. python 编程算法_python语言编程算法
  9. mysql 半同步 配置_Mysql 半同步复制配置
  10. 计算机硬件结构控制信息,计算机硬件的基本结构