UNION 与 WHERE 子句

2024-06-24

我正在做一个UNIONOracle 数据库上的两个查询。他们俩都有一个WHERE条款。如果我这样做的话,性能会有什么不同吗?WHERE after UNION与执行查询相比UNION after WHERE clause?

例如:

SELECT colA, colB FROM tableA WHERE colA > 1
UNION
SELECT colA, colB FROM tableB WHERE colA > 1

相比:

SELECT * 
  FROM (SELECT colA, colB FROM tableA
        UNION
        SELECT colA, colB FROM tableB) 
 WHERE colA > 1

我相信在第二种情况下,它会对影响性能的两个表执行全表扫描。那是对的吗?


根据我的经验,Oracle 非常擅长推动simple周围的谓词。以下测试是在Oracle 11.2上进行的。我相当确定它在 10g 的所有版本上也会产生相同的执行计划。

(如果您运行早期版本并尝试以下操作,请随时发表评论)

create table table1(a number, b number);
create table table2(a number, b number);

explain plan for
select *
  from (select a,b from table1
        union 
        select a,b from table2
       )
 where a > 1;

select * 
  from table(dbms_xplan.display(format=>'basic +predicate'));

PLAN_TABLE_OUTPUT
---------------------------------------
| Id  | Operation            | Name   |
---------------------------------------
|   0 | SELECT STATEMENT     |        |
|   1 |  VIEW                |        |
|   2 |   SORT UNIQUE        |        |
|   3 |    UNION-ALL         |        |
|*  4 |     TABLE ACCESS FULL| TABLE1 |
|*  5 |     TABLE ACCESS FULL| TABLE2 |
---------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------    
   4 - filter("A">1)
   5 - filter("A">1)

正如您在步骤 (4,5) 中看到的,谓词被下推并在排序(并集)之前应用。

我无法让优化器下推整个子查询,例如

 where a = (select max(a) from empty_table)

或加入。如果有适当的 PK/FK 约束,这可能是可能的,但显然存在局限性:)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

UNION 与 WHERE 子句 的相关文章

  • 在 Oracle SQL Developer 中连接表

    我有四个表 我想将它们连接起来并一起显示输出 我不确定 Oracle SQL Developer 的语法如何工作 我知道这对于程序员来说是一个简单的问题 我希望有人可以就代码的外观提出建议 The tables are JNL1 JNL2
  • 将多个表中的数据获取到单行中,同时连接一些值

    我正在尝试从表中检索数据并将多行合并为一列 而不重复任何信息 我有以下表格 简介 资格 项目 Profile pro id surname firstname 1 John James 2 King Fred 3 Luxury Yachts
  • 使用 Union 或 Join - 哪个更快 [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我只是想知道你是否有一张桌子并且联合起来会比使用联接更有效吗 我确实知道联接创建了更多列 但这更具理论性 联合是否需要像联接那样对另一
  • MySQL 将所有空格替换为 -

    我怎样才能删除一行中的所有空格 我在这里看到很多相同的问题 但所有答案都使用替换选项 替换只能去除一个空格 而不是全部 例如 a b c 变为 a b c Thanks 这可以通过以下 MySQL 函数来实现 SELECT REPLACE
  • Python 和 SQLite:插入表

    具有以下表架构 tablename name varchar 100 age int sex char 1 有一个list有 3 行 每行代表一个表行 row1 laks 444 M row2 kam 445 M row3 kam 445
  • 检查行是否存在,Laravel

    我有以下数据库结构 items id name user id users table id name user favorites table id user id item id 在我的项目永久链接页面上 我有一个 添加到收藏夹 按钮
  • SQL 用逗号替换点

    我有以下代码 SELECT cast Listenpreis 1 19 as decimal 29 2 as Listenpreis FROM SL M03KNE dbo ARKALK 我得到这个值 5 59 我尝试将点替换为 komma
  • 使用 JavaScript 清理 SQL 数据

    我有一堆具有各种输入元素的表单 我想在服务器端清理这些 yes 我使用服务器端 JavaScript 将这些输入用作参数 并防止特殊字符格式错误 在你走之前 比如 这不属于 JavaScript 的领域 等等 我正在使用一个价值数百万美元的
  • SQL Server 2008:TOP 10 和不同的一起

    正如标题所示 我正在使用 SQL Server 2008 如果这个问题非常基本 我深表歉意 我才使用 SQL 几天 现在我有以下查询 SELECT TOP 10 p id pl nm pl val pl txt val from dm la
  • 在 CodeIgniter、SQL 中调用布尔值的成员函数 result()

    我试图根据搜索关键字查看 data results 中有哪些数据 但每次都会出现上述致命错误 有人可以帮助我吗 我的控制器 public function execute search search term this gt input g
  • 以编程方式设置 v$session 程序属性

    我找到了一些关于这个问题的答案 但没有一个可以在我的案例中发挥作用 我的问题是我使用 spring 从 JBoss 配置加载数据源
  • 我们可以在oracle中命名一个默认约束吗

    在MS SQL中 我们在表创建过程中可以有以下约束 create table test WarningEnabled bit NOT NULL CONSTRAINT DF WarningEnabled DEFAULT 1 正如我们所看到的
  • ISDATE 相当于 DB2

    我有一个包含字符格式日期的表 我想检查日期的格式 请让我知道如何在 DB2 中做到这一点 我知道有一个函数 ISDATE 但它在 DB2 中不起作用 我在 AS400 上使用 db2 作为日期基础 请帮助我 实际上 看起来 DB2 for
  • 使用递归 CTE 生成嵌套第 n 层 JSON SQL Server

    我有以下结构的数据 我想使用父属性 id 关系生成嵌套 JSON 所需的输出 propertyID 1 title foo class typeid 150 value bar children propertyID 2 title foo
  • ASP.NET MVC5 - 将用户保留在 Oracle 数据库中

    一旦创建了一个ASP NET MVC5项目 目标框架是 NET 4 5 1认证类型是个人用户帐户 那么配置项目以便将用户 声明 角色等保留在 Oracle 12c 数据库中的最优雅的方法是什么 我的意思是 如何在不影响自动生成的 MVC5
  • sp_MSforeachtable 在每个表上执行过程

    我想打印一些动态查询来对数据库中的所有表执行过程 这是我到目前为止所写的 EXEC SP MSFOREACHTABLE IF EXISTS SELECT FROM INFORMATION SCHEMA COLUMNS WHERE COLUM
  • SQL LIKE 实际上是如何工作的

    例如 当我有这样的字符串时 ABBBCSLAK JDK ASAAAAFJKDSKJFSDF 当我像这样使用 SQL 时 SELECT FROM table WHERE column LIKE JDK 当服务器访问 JDK 时到底会发生什么
  • 根据多列删除重复记录

    在我们的系统中 我们每小时从外部数据库进行导入 由于导入脚本中存在错误 现在存在一些重复记录 如果任何记录具有相同的内容 则视为重复 legacy id and company 我可以运行什么代码来查找并删除这些重复项 我正在玩这个 Pro
  • 即使为空也显示值

    我正在使用以下内容显示过去 7 天内添加的产品计数 即使 COUNT 0 我是否可以以某种方式定制查询以显示过去 7 天的所有产品 查询现状 SELECT DAYNAME dateadded DAY COUNT COUNT FROM pro
  • 邮政编码 10 位数字字符使用的约束检查

    我有一张桌子 上面有Char 10 列类型 命名postal Code我需要对所有值进行约束检查 就像 10 位数字一样1234567890没有别的 我使用以下内容 CONSTRAINT CH PCDigit CHECK PostalCod

随机推荐

  • AWS API Gateway 基于 URI 的版本控制

    我很难理解 AWS API Gateway 希望我如何组织 API 以使版本控制变得简单 例如 假设我有一个简单的 API 用于从字典中获取单词 可以选择通过查询参数过滤结果 我希望在以下位置提供此版本的 v1 https
  • 如何自动使我的 TortoiseSVN 项目保持最新?

    我正在使用 TortoiseSVN 作为保存在 USB 驱动器上的 Subversion 存储库 当我从一台电脑转移到另一台电脑时 是否有一种方法可以自动识别文件是否已过期 无需使用 检查修改 菜单 如果能够看到我的硬盘驱动器上的文件夹与存
  • 如何在Python中打开和编辑现有文件?

    一段时间以来 我一直在开发各种不同的程序来练习我的 Python 其中最引人注目的是我的 选择你自己的冒险 游戏 到目前为止它已经超过 1000 行 最近 我一直在尝试在 Python 中编辑文件 但我似乎无法弄清楚 例如 如果我将变量设置
  • 节点 - 告诉请求的来源

    是否可以区分直接来自浏览器中 URL 的请求与从远程网页调用的资源之间的区别 例如 当有人直接访问我的 URL 输入http mywebsite com http mywebsite com 在网络浏览器中 但是当用户通过来自单独域的 ur
  • 运行 shell 命令从 Android 应用程序复制文件

    我正在尝试启动一个应用程序 以便将我的应用程序备份到 SD 卡 我跑 Process p Runtime getRuntime exec su Process c Runtime getRuntime exec cp data app co
  • 尽管设置了随机状态和相同的输入,sklearn RandomForestClassifier.fit() 仍不可重现

    在使用 Scikit learn 调整随机森林模型时 我注意到即使我使用相同的 RandomForestClassifier 实例和相同的数据作为输入 但在不同的运行后其准确度分数也不同 我尝试了谷歌搜索和 stackExchange 搜索
  • Console.Read 被忽略[重复]

    这个问题在这里已经有答案了 我是 C 语言的新手 刚刚开始学习它以便在 XNA Game Studio for X box 上使用 我对 Java 和 C 有一些小小的经验 所以我不是一个完全的菜鸟 这正是这个问题让我如此沮丧的原因 我创建
  • 如何指定 lm 中参数估计值之间的关系?

    使用 lm 我想拟合模型 y b0 b1 x1 b2 x2 b1 b2 x1 x2 我的问题是 如何指定相互作用系数应等于主效应系数的乘积 我已经看到要将系数设置为特定值 您可以使用 offset 和 I 但我不知道如何指定系数之间的关系
  • 从 Python 脚本启动交互式 SSH 会话

    我想从 Python 脚本启动交互式 SSH 终端without使用 pexpect 或 paramiko 等模块 我想坚持使用 CentOS 预装的 Python 提供的功能 以缓解兼容性和部署问题 我可以使用子进程模块正常运行命令 但无
  • 如果有人提交“恶意软件”nuget 包怎么办?

    我检查了Nuget提交流程 http docs nuget org docs creating packages creating and publishing a package 并且没有找到任何有关基本检查或审查流程的信息 那么 如果有
  • 使用 CSS3 过渡延迟鼠标移出/悬停

    我有一个盒子 悬停时会改变大小 但是 我想延迟鼠标移出阶段 以便框在恢复旧尺寸之前保持新尺寸几秒钟 div width 70px webkit transition 5s all div hover width 130px 不使用 Java
  • 删除时忽略限制(猫鼬)

    我需要删除集合中最早的几个文档 所以我写了这样的内容 Model remove u abc sort id 1 limit 10 exec function err count count gives the total documents
  • 使用 Celery 同时执行两个任务

    我正在本地环境中测试芹菜 我的Python文件有以下两行代码 celery app send task tasks test1 args self id kwargs celery app send task tasks test2 arg
  • 对 UIView 框架进行动画处理,子视图 UIScrollView 并不总是进行动画处理

    In this http screencast com t YvjNf5Z1xMn例子 当我对 tabBarController 进行动画处理时 为了实现全屏效果 我对 PhotoViewerViewController 的框架进行了动画处
  • 关于是否使用基于Annotation的spring boot graphql服务器的指导

    我正在使用 spring boot 和 graphql 开发一个新项目 我对如何继续感到困惑 因为有两种方法可以开发它 一种是通过 graphqls 文件和基于注释的方法 我更喜欢基于注释的方法 但它们稳定吗 例如 https github
  • gnuplot 中的填充图案

    我想知道 gnuplot 是否提供了比您在输入 test 时看到的 8 种模式更多的阴影模式 例如在 wxt 终端中 也许有超过 8 种填充图案 显然不是 如下面的代码所示 我不是在谈论与不同颜色组合的图案 我只是指图案的类型 我希望你能够
  • 匈牙利算法 - 系统分配

    我正在一个项目中实现匈牙利算法 我设法让它工作 直到所谓的步骤 4维基百科 http en wikipedia org wiki Hungarian algorithm Matrix 5Finterpretation 我确实设法让计算机创建
  • 用户 mycomputer\myloginName 没有所需的权限

    我正在尝试访问 SSRS 的报告管理器 URL 但是 我不断收到以下错误 用户 mycomputer myloginName 没有所需的权限 验证是否已授予足够的权限并且已解决 Windows 用户帐户控制 UAC 限制 我尝试以管理员身份
  • 用于控制器休息服务的 Spring Junit 测试用例

    我有一个响应 REST 调用的控制器 我有针对其他公共方法的各种测试用例 我不知道如何为我的控制器编写一个 RequestMapping value api frames method RequestMethod GET public Li
  • UNION 与 WHERE 子句

    我正在做一个UNIONOracle 数据库上的两个查询 他们俩都有一个WHERE条款 如果我这样做的话 性能会有什么不同吗 WHERE after UNION与执行查询相比UNION after WHERE clause 例如 SELECT