Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >oracle合并操作挂起(或循环);查询调谐器声称这是笛卡尔产品操作

oracle合并操作挂起(或循环);查询调谐器声称这是笛卡尔产品操作
EN

Database Administration用户
提问于 2012-10-24 08:42:15
回答 1查看 2.8K关注 0票数 2

我有一个合并查询(开放给更好的建议),它似乎会导致服务器挂起。(我不知道它在做什么,但它固定CPU,永远不会完成)当我通过查询调谐器运行它时,我被告知这是“在执行计划的第7行发现了昂贵的笛卡尔产品操作”,我应该“考虑从这个语句中删除断开连接的表或视图,或者添加一个引用它的联接条件”。问题是,没有断开连接的表。

下面是解释计划:

代码语言:javascript
运行
AI代码解释
复制
---------------------------------------------------------------------------------------------------
| Id  | Operation                         | Name          | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------------------------------
|   0 | MERGE STATEMENT                   |               |     1 |    18 |    75  (10)| 00:00:01 |
|   1 |  MERGE                            | CM_SSS_DETAIL |       |       |            |          |
|   2 |   VIEW                            |               |       |       |            |          |
|   3 |    SORT GROUP BY                  |               |     1 |  1352 |    75  (10)| 00:00:01 |
|   4 |     NESTED LOOPS                  |               |       |       |            |          |
|   5 |      NESTED LOOPS                 |               |     1 |  1352 |    74   (9)| 00:00:01 |
|   6 |       NESTED LOOPS                |               |     1 |  1328 |    73   (9)| 00:00:01 |
|   7 |        MERGE JOIN CARTESIAN       |               |     1 |  1306 |    72   (9)| 00:00:01 |
|   8 |         TABLE ACCESS FULL         | CM_SSS_DETAIL |     1 |  1274 |    18   (0)| 00:00:01 |
|   9 |         BUFFER SORT               |               | 12815 |   400K|    54  (12)| 00:00:01 |
|* 10 |          TABLE ACCESS FULL        | CI_CC         | 12815 |   400K|    54  (12)| 00:00:01 |
|  11 |        TABLE ACCESS BY INDEX ROWID| CI_CASE       |     4 |    88 |     1   (0)| 00:00:01 |
|* 12 |         INDEX RANGE SCAN          | XT220S1       |     6 |       |     1   (0)| 00:00:01 |
|* 13 |       INDEX RANGE SCAN            | XT222P0       |     1 |       |     1   (0)| 00:00:01 |
|* 14 |      TABLE ACCESS BY INDEX ROWID  | CI_CASE_CHAR  |     1 |    24 |     1   (0)| 00:00:01 |
---------------------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

10 - filter("CC"."CC_TYPE_CD"='1NAA-LTR' OR "CC"."CC_TYPE_CD"='1NEA-LTR' OR
"CC"."CC_TYPE_CD"='1NIP-LTR' OR "CC"."CC_TYPE_CD"='CBS-LTR' OR
"CC"."CC_TYPE_CD"='CBS1-LTR' OR "CC"."CC_TYPE_CD"='CBS2-LTR' OR
"CC"."CC_TYPE_CD"='DNAR-LTR' OR "CC"."CC_TYPE_CD"='INR-LTR' OR "CC"."CC_TYPE_CD"='IPL-LTR'
OR "CC"."CC_TYPE_CD"='SOFB-LTR')
12 - access("CC"."PER_ID"="C"."PER_ID")
13 - access("CHR"."CASE_ID"="C"."CASE_ID" AND "CHR"."CHAR_TYPE_CD"='OBLGID')
14 - filter("D"."SA_ID"="CHR"."CHAR_VAL_FK1")

-------------------------------------------------------------------------------

以下是我的查询:

代码语言:javascript
运行
AI代码解释
复制
MERGE INTO cm_sss_detail d
USING (
    SELECT chr.char_val_fk1, MIN(cc.cc_dttm) first_date
    FROM ci_case c
    JOIN ci_cc cc
        ON (cc.per_id = c.per_id)
    JOIN ci_case_char chr
        ON (chr.case_id = c.case_id)
    WHERE chr.char_type_cd = 'OBLGID'
        AND cc.cc_type_cd IN (  '1NAA-LTR','CBS1-LTR','CBS2-LTR','CBS-LTR',
                                'DNAR-LTR','IPL-LTR','INR-LTR','SOFB-LTR',
                                '1NEA-LTR','1NIP-LTR')
    GROUP BY chr.char_val_fk1
) b
ON (d.sa_id = b.char_val_fk1)
WHEN MATCHED THEN UPDATE
    SET d.fst_bill_date = b.first_date;

cm_sss_detail表在sa_id列上有一个索引(也是PK)。

EN

回答 1

Database Administration用户

回答已采纳

发布于 2012-10-24 08:55:23

根据查询计划,优化器期望MERGE语句将修改1行。它似乎也期望笛卡尔连接返回一个行。基于查询不会在几毫秒内返回的事实,这通常意味着一个或多个对象(表或索引)上的统计信息基本上是不正确的。上一次在这些表及其依赖索引上收集统计数据是什么时候?从那以后,表中的实际数据是否发生了很大的变化?

票数 1
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/27540

复制
相关文章
为什么努力学习?是爱吗?是责任吗?不,是因为菜!
知识膨胀的过程 距离找到学习方法,并全身心投入到学习中五十几天,还在不断修正自己的学习方法,虽然大体方向是对的,但是还是有瑕疵的. 为什么要用膨胀这个词,其实并不太合适,但是因为没有消化掉自己汲取的知识,所以,用膨胀也不为过. ---- 消化所学的知识 目前采用的从面了解到点深入的学习方法,加上自己iOS开发经验和基础,使我学习上轻松了不少,我衷心的感谢每一个帮助过我的人,可以让我现在快速的学习新知识. 知识吸收速度提升,那么下一个需要担心的就是转化率,吸收了大量的知识,刷新了一遍又一遍的认知,就需要马上进
筑梦师winston
2018/05/10
7522
为什么说外链建设中,友链交换是最重要的?
大家都知道友情链接交换是外链建设中的一种,但是友情链接在外链中的占比到底有多大呢?
蝙蝠侠IT
2021/07/07
4080
为什么说外链建设中,友链交换是最重要的?
配置相同的电脑,为什么也不推荐直接ghost对拷?
在上期封装系统的文章中,很多同学留言问“硬件完全一样的多台电脑能不能直接ghost对拷?”,就结果来说是可以的,每台电脑都可以运行,那么封装的意义何在?
王忘杰
2022/09/21
1.6K0
配置相同的电脑,为什么也不推荐直接ghost对拷?
linux中为什么你应该添加交换空间swap
我们知道使用Linux交换空间而不是 RAM(内存)会严重降低性能。那么,有人可能会问,既然我有足够多的可用内存,删除交换空间不是更好吗?简短的回答是不会。启用交换空间会带来性能优势,即使你有足够多的内存。 即使安装了足够多的服务器内存,你也会经常发现在长时间正常运行后会使用交换空间。请参阅以下来自具有大约一个月正常运行时间的实时聊天服务器的示例: total used free shared buff/cache available
入门笔记
2022/06/02
1.9K0
linux中为什么你应该添加交换空间swap
从汇编角度与你分析「为什么不要用异或来交换两个数」
Python 的这种不借助临时变量实现交换实际是巧妙的利用了“操作栈”,属于语言层面上的特性技巧,不在我们的讨论范围。
宫水三叶的刷题日记
2021/02/20
8110
计算机网络之数据交换(电路交换,报文交换,分组交换)电路交换报文交换分组交换分组交换与电路交换
就要经过网络核心进行数据交换,数据不断从一个网络交换到另一个网络,直到到达目的主机。所以网络核心解决的基本问题就是数据交换。
desperate633
2018/08/22
2K0
计算机网络之数据交换(电路交换,报文交换,分组交换)电路交换报文交换分组交换分组交换与电路交换
交换机的交换架构
交换机的交换架构是框式交换机才有的概念,它最主要的作用是任意输入端可以交换为任意输出端。交换架构的最基本组成为:输入端口、输出端口和连接输入输出端口的交换网络。
利又德智能感知
2022/11/08
2.6K0
交换机的交换架构
LeetCode-1247-交换字符使得字符串相同
有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 "x" 和 "y",你需要通过「交换字符」的方式使这两个字符串相同。
benym
2022/07/14
3520
LeetCode 1247. 交换字符使得字符串相同
有两个长度相同的字符串 s1 和 s2,且它们其中 只含有 字符 “x” 和 “y”,你需要通过「交换字符」的方式使这两个字符串相同。
Michael阿明
2020/07/13
1.4K0
LeetCode 1247. 交换字符使得字符串相同
为什么编译原理被称为龙书?
这本书很有意思,它的书名是 《Compilers: Principles, Techniques, and Tools》,也就是编译器的原则、技术和工具。但它却画出了一个恐龙和骑士,恐龙身上写的是 Complexity of Compiler Design,也就是复杂的编译器设计,骑士的盾上写的是 Syntax Directed Granslation,也就是语法翻译。骑士的剑上看的不是很清楚,我猜测应该是优秀的编译器的意思。这是征服复杂性的隐喻。优秀的编译器会直接征服复杂的编译,复杂的编译设计永远无法攻破语法翻译。
cxuan
2020/07/17
1.4K0
2.1.4 电路交换、报文交换和分组交换
在进行数据传输前,两个结点之间必须要建立一条专用(双方独占)的物理通信路径(由通信双方之间的交换设备和链路逐段连接而成),该路径可能经过许多中间结点。该线路在整个数据传输期间一直被独占,直到通信结束后才被释放。因此,电路交换技术分为三个阶段:连接建立,数据传输和连接释放。
week
2018/08/24
1.9K0
电路交换和分组交换的异同_电路交换的三个过程
从交换技术的发展历史看,数据交换经历了电路交换、报文交换、分组交换和综合业务数字交换的发展过程。
全栈程序员站长
2022/09/30
6890
为什么不建议用try catch处理异常?
原文:http://u6.gg/kpz4f 软件开发过程中,不可避免的是需要处理各种异常,就我自己来说,至少有一半以上的时间都是在处理各种异常情况,所以代码中就会出现大量的 try {...} catch {...} finally {...} 代码块,不仅有大量的冗余代码,而且还影响代码的可读性。 比较下面两张图,看看您现在编写的代码属于哪一种风格?然后哪种编码风格您更喜欢? 丑陋的 try catch 代码块: 优雅的 Controller: 上面的示例,还只是在 Controller 层,如果是
java思维导图
2022/03/18
1.8K0
什么是 EVPN 交换机?
EVPN 引入了一种新的以太网服务交付模型,它通过使用 BGP 为 VXLAN 隧道提供可扩展、可互操作的端到端控制平面解决方案,这意味着它为第 3 层路由基础设施上的第 2 层虚拟化提供了更简单的解决方案。
网络技术联盟站
2021/09/06
9240
什么是 EVPN 交换机?
白牌交换机“经打”不“经打”?
随着交换机 25Gbps端口速率 逐渐成为DC的主流选择 25G网卡出货接连创历史新高 25G交换机品牌繁多 白牌交换机少不了掺乎 但是开放式交换机能否经受 专业测试设备的流量拷打是个疑问 为此 国际权威评测机构 Tolly Group对白牌交换机 做了专业测评并给出Robust的结论 THE BOTTOM LINE Support for 10/25/40/100 GbE LANs Robust L2 support including RSTP/MSTP, VLANs, trun
用户6874558
2023/02/15
3590
白牌交换机“经打”不“经打”?
华为交换机通过OSPF MD5认证对接H3C交换机失败,为什么?
华为S12704和H3C S7506E属于区域0,OSPF认证时,接口上配置了认证方式和密码,但是,身份验证失败,无法建立 OSPF 邻居关系。
网络技术联盟站
2023/03/13
7380
华为交换机通过OSPF MD5认证对接H3C交换机失败,为什么?
常见的数据交换方式有电路交换,报文交换_电路交换网络有哪些
局限性1(N2次方链路问题):因为两两主机之间连接的话,将有[n(n-1)]/2条链路数量,那么当主机数量过多?成本变高。
全栈程序员站长
2022/09/19
4750
常见的数据交换方式有电路交换,报文交换_电路交换网络有哪些
poe交换机是干什么用的_poe交换机
供电用的交换机,比如安装网络监控时不方便给摄像头拉电线,就可以使用PoE交换机供电,还有弄无线网络时也可以给AP供电,主要方便,关于怎么使用,如果那些需要供电的设备支持PoE直接连接就行了。那么,什么叫POE交换机?POE交换机怎么使用呢?接下来我们就跟随飞畅科技的小编一起来详细了解下吧!
全栈程序员站长
2022/09/27
4480
poe交换机和接入交换机的区别_光纤交换机和普通交换机的区别
POE交换机与普通交换机区别的话,POE交换机就是除了能提供普通交换机所具有的传输功能,还能给网线的另一端设备提供供电功能。普通的交换机主要是交换数据的功能,并没有具备供电的功能。接下来我们就一起来详细看看POE交换机和普通交换机的区别具体有哪些?
全栈程序员站长
2022/11/09
2.1K0
poe交换机和接入交换机的区别_光纤交换机和普通交换机的区别
数值交换
/* 功能:数值交换 日期:2013-05-16 */ #include <stdio.h> #include <stdlib.h> #include <math.h> #define LEN 10 int main(void) { int num[LEN] = {0}; int max,min,tmp,i;
WindCoder
2018/09/20
1.1K0

相似问题

为什么它被称为‘.’‘

26

java匿名语句或它被称为什么?

30

为什么它被称为“打开(或关闭)递归”?

15

为什么它被称为XMLHttpRequest?

30

为什么它被称为“云”?

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档