首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >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

复制
相关文章
TypeScript函数的类型
函数声明 在 JavaScript 中,有两种常见的定义函数的方式——函数声明(Function Declaration)和函数表达式(Function Expression): 函数声明(Function Declaration)
conanma
2021/12/07
2.1K0
TypeScript函数类型
通过如下代码我们实现了一个返回值为number类型的方法,同时我们也对返回值和参数进行了约束
HueiFeng
2020/04/09
7940
TypeScript函数类型
通过如下代码我们实现了一个返回值为number类型的方法,同时我们也对返回值和参数进行了约束
HueiFeng
2020/04/10
8240
TypeScript获取函数参数类型
现在有一个函数update,我们想要获取他的参数类型,你应该怎么做呢?这个时候我们需要就要用到Parameters
用户6256742
2022/07/06
3K0
TypeScript - 类型声明、枚举、函数、接口
4.自定义类型 当一些复杂类型需要多次使用,可以通过type来自定义类型,便于复用
WahFung
2020/08/22
1.8K0
TypeScript 对象的类型-接口
在 TypeScript 中,我们使用接口(Interfaces)来定义对象的类型
Leophen
2020/07/13
3.5K0
获取对象具体类型的功能函数
HTML5学堂:JavaScript当中,时常会使用到typeof来进行数据类型的检测,但是我们觉得typeof不能够满足我们的需求,对于数组、函数、时间对象等,使用typeof返回的都是“object”,如果我们希望更进一步的检测要怎么办呢?一起来看吧~ toString方法 在JavaScript当中,想要判断一个对象值属于哪种内置对象,最靠谱的方法就是使用toString 先上代码 var str = 'HTML5学堂'; var arr = ['独行冰海', '梦幻雪冰']; var obj = {
HTML5学堂
2018/03/12
1.4K0
获取对象具体类型的功能函数
Golang 函数返回类型是接口时返回对象的指针还是值
Interface 是一组抽象方法(未具体实现的方法,仅包含方法名参数返回值的方法)的集合,如果实现了 interface 中的所有方法,即该类型就实现了该接口。
恋喵大鲤鱼
2019/06/14
8.3K0
(十六)函数作为参数值、变量值或对象时的类型
# 一、函数作为参数值、变量值或对象时的类型 说明 函数作为参数值、变量值或对象时它的类型该如何限定 问题 // 这个时候限定传入的参数要符合这种类型参数呢 function request(callback) { callback('sucess') } 解决方式 语法:callback: (名字: 类型) => 返回值类型,没有返回值用 void function request(callback: (result: string) => void) { callback('sucess
老怪兽
2023/02/22
1.4K0
初探 TypeScript函数基本类型泛型接口类内置对象
前段时间有朋友和我推荐 TypeScript ,他说写起来特别爽,让我去试一试,那时候我还在那是啥高深莫测的东西。刚好那段时间忙,一直没有时间看。最近也很忙,还是抽时间来探一探 TypeScript ;简单说 ts 主要提供的是 dynamic type check,提供的 interface 接口这个功能在开发项目的时候会很有帮助。TypeScript是 JavaScript 的一个超集。他和 JavaScript 有着千丝万缕的关系。
sunseekers
2018/10/31
7.4K0
typescript中的工厂函数
工厂函数是一种特殊的函数,用于创建和返回对象或其他数据结构。它通常用于封装和组织代码,允许动态地创建多个实例或对象,每个实例可能具有不同的属性或行为。
酒楼
2023/10/09
2900
TypeScript 函数中的 this 参数
从 TypeScript 2.0 开始,在函数和方法中我们可以声明 this 的类型,实际使用起来也很简单,比如:
阿宝哥
2020/03/20
8K0
python 可接受任意参数的函数
def avg(first, *rest): return (first + sum(rest)) / (1 + len(rest))
用户5760343
2019/10/21
8420
Typescript 严格模式有多严格?
"use strict"指令在JavaScript 1.8.5 (ECMAScript5)中新增。
用户1462769
2019/11/18
3.1K0
Typescript 严格模式有多严格?
Typescript 严格模式有多严格?
"use strict"指令在JavaScript 1.8.5 (ECMAScript5)中新增。
前端劝退师
2019/11/07
2.1K0
Typescript 严格模式有多严格?
mybatis文件映射之当输入的参数不只一个时
2、多个参数:mybatis遇见多个参数会进行特殊处理,多个参数会被封装成员一个map,#{}就是从Map中获取指定的key的值。
西西嘛呦
2020/08/26
4930
【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
函数类型格式 : 圆括号中定义 参数类型列表 , 使用 -> 由参数列表指向返回值类型 , 表示接受 参数类型列表 中的参数 , 返回 返回值类型 的返回值 ;
韩曙亮
2023/03/27
3K0
TypeScript 函数(下)
递归函数 递归函数即在函数内调用函数本身。 举个例子: 从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?"从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?'从前有座山,山里有座庙,庙里有个老和尚,正在给小和尚讲故事呢!故事是什么呢?……'" 实例 function factorial(number) { if (number <= 0) { // 停止执行 return 1; } else {
陈不成i
2021/07/30
6050
点击加载更多

相似问题

严格定义接受对象的函数的类型,修改它的值,并在TypeScript中返回它

26

TypeScript如何对子构造函数使用更严格的类型?

24

TypeScript推断接受函数作为参数函数返回类型

114

接受对象或数组参数的TypeScript函数

112

调用/应用严格函数与非严格函数时不同类型的“this”

13
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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