Oracle left join 和 where 条件应用时的效率研究

今天写了个SQL语句,但是速度总是很慢,后来做些改动速度提升了几倍,记录下来心得,一起分享讨论!

如:(1) select * from A   left join B  on A.b = B.b  left join C  on A.c = C.c  where 1=1 and A.d = 'XXXXX' and A.e = 'SSSSS'

和   (2) select * from (select * from A   left join B  on A.b = B.b  left join C  on A.c = C.c ) aa where aa.d = 'XXXXX' and aa.e = 'SSSSS'

两条SQL执行结果一样但是效率却截然不同,个人原因分析如下:

1、(1)语句应该是表A每left join 一次就会where 条件过滤一次,这样执行两次where过滤

(2)语句是在所有left join 之后统一用where 条件过滤的,这样执行一次where 过滤    设想:加入A做为主表当与A表关联的表特别多时,没关联一次就where 过滤一次

这样无疑速度会慢,相比(2)无论关联多少表只where 条件过滤执行一次效率相对要高一些。

引申:   将条件写到on和where 的区别,当然是on较快,因为SQL执行顺序是 on -where 而表连接是先on过滤然后过滤后的值再做笛卡尔积,这样笛卡尔积的数值不至于较大,而条件写到where的时候无疑是两张较大的表的笛卡尔积,然后才where 条件。这样就顺序就是left join - on而不是先on 再left join 了,当然各有千秋,只是个人想法,备忘。

join orcl的left_oracle中left join与where相关推荐

  1. mysql inner join多条件_Mysql中Left Join Right Join Inner Join where条件的比较

    建立一对多的表 company 和 employee company表 id      name      address 1baidu北京 2huawei深圳 3jingdong北京 4tengxu ...

  2. join orcl的left_Oracle关联查询关于left/right join的那点事

    /*题外话 --更改foreign key约束定义引用行(delete cascade/delete set null/delete no action),默认delete on action --引 ...

  3. Spark中的Join操作及问题解决

    目录 一.数据准备 二.Spark Core中的Join 三.Spark SQL中的Join 1.常用案例 2.Spark SQL中的5种Join 四.解决数据倾斜问题 1.大表Join小表(100M ...

  4. left join最多几张表_Spark中的join策略

    背景 join是SQL中最常见的操作,写SQL最经常的场景就是几张表各种join,join操作也是各种操作中最耗时的操作之一. 作为一个Spark SQL Boy,有必要详细了解一下Spark的joi ...

  5. sql语句中left join和inner join中的on与where的区别分析

    原文:sql语句中left join和inner join中的on与where的区别分析 关于SQL SERVER的表联接查询INNER JOIN .LEFT JOIN和RIGHT JOIN,经常会用 ...

  6. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  7. SQL中的join操作总结(非常好)

    1.1.1 摘要 Join是关系型数据库系统的重要操作之一,SQL Server中包含的常用Join:内联接.外联接和交叉联接等.如果我们想在两个或以上的表获取其中从一个表中的行与另一个表中的行匹配的 ...

  8. Oracle的join默认为,Oracle中的三种Join方法详解

    这里将为大家介绍Oracle中的三种Join方法,Nested loop join.Sort merge join和Hash join.整理出来以便帮助大家学习. 基本概念 Nested loop j ...

  9. 关于hive中Map join 时大表left join小表的问题

    在hive中,(启用Map join时) 大表left join小表,加载从右向左,所以小表会加载进内存,存储成map键值对,通过大表驱动小表,来进行join,即大表中的join字段作为key 来获取 ...

最新文章

  1. 蓝鸥原生JS:js的历史及JavaScript的优缺点
  2. nmap,tcpdump
  3. uml图中的各种箭头_一次搞懂建模语言UML
  4. “网络小偷”猖獗横行 探秘信息数据黑产链
  5. keras调用自己训练的模型,并去掉全连接层
  6. 一步一步学会JDBC
  7. OA 办公自动化系统 现状
  8. 利用python解决简单数独
  9. VS 2019教程:创建ASP.NET Core Web App
  10. 保护环境从我做起(10件力所能及之事)
  11. SUT计算机测试,调试功能测试(徽标) | Microsoft Docs
  12. Pycharm 系统找不到指定的路径 报错!!
  13. 【微信小程序】./miniprogram\ 未找到 [1.06.2210141][win32-x64]错误
  14. 数据库select的查询使用方法
  15. 命令行运行Windows更新
  16. java+代码实现+流星雨,js代码实现流星雨 - osc_zls6dx9i的个人空间 - OSCHINA - 中文开源技术交流社区...
  17. 中序遍历解决二叉搜索树问题
  18. Nginx中保持长连接的配置
  19. 仿迅雷播放器教程 -- C++ windows界面库对比(11)
  20. 【Python】超简单的华容道小游戏制作+保姆级讲解(附源码)

热门文章

  1. linux时间调整为dst,Linux上系统时间函数、DST等相关有关问题总结
  2. ARMS为深绘智能系统保驾护航
  3. 做过《战神》《死亡搁浅》的光子动捕专家,怎么理解动捕?
  4. Unite 2018 | 浅谈伽玛和线性颜色空间
  5. 使用Unity从零点五开始,做半个不能玩的小游戏(完)
  6. 程序员体健康的各项指标是多少?
  7. 【Auto.js】使用命令删除图片后,更新图库缓存
  8. JSP和Servlet的六种中文乱码处理方法
  9. 零基础学Python(第十一章 字符串处理)
  10. 每天学点Python之collections