Z_ZZZZZZZZ_BENE 大约有400万数据
修改前
 
SELECT xxxx
FROM (
SELECT DISTINCT FIELD1_CONTENT
FROM xxxxxxxx_LOG@DBLINK
WHERE UPPER(TABLENAME) = 'Y_YYYYYYYYY_PRODUCT'
AND DATECODE >= TO_DATE('2019-06-18 00:25:40','YYYY-MM-DD HH24:MI:SS')
AND DATECODE <= TO_DATE('2019-06-19 01:06:49','YYYY-MM-DD HH24:MI:SS')
AND BUSINESSTYPE = 'NEW'
) C,
Y_YYYYYYYY_PRODUCT@DBLINK A,
Z_ZZZZZZZZ_BENE@DBLINK B
WHERE A.ITEM_ID = C.FIELD1_CONTENT
AND A.XXXXXX_ID = B.XXXXXX_ID
AND A.XXXXXXX_1 = B.YYYYYYYY
AND B.XXXXXX_ID IS NOT NULL
AND B.REAL_NAME<>'法定受益人'
AND B.REAL_NAME<>'法定继承人'
AND B.REAL_NAME<>'详见特别约定'
AND B.REAL_NAME<>'祥见特别约定'
AND B.REAL_NAME<>'法定'
AND ( ( B.REAL_NAME IS NOT NULL
AND B.CERTI_TYPE IS NOT NULL
AND B.CERTI_CODE IS NOT NULL
)
OR
( B.REAL_NAME IS NOT NULL
AND B.TELEPHONE IS NOT NULL
)
);

  

修改前的执行计划,执行这个脚本大约4个小时没跑完。

SQL_ID  acbfjjjak0vub, child number 0
-------------------------------------
INSERT INTO xxxxxxxxxx SELECT xxxxx FROM ( SELECT DISTINCT FIELD1_CONTENT
FROM xxxxxxxx_LOG@DBLINK WHERE UPPER(TABLENAME) =
'Y_YYYYYYYY_PRODUCT' AND DATECODE >= TO_DATE('2019-06-18
00:25:40','YYYY-MM-DD HH24:MI:SS') AND DATECODE <=
TO_DATE('2019-06-19 01:06:49','YYYY-MM-DD HH24:MI:SS') AND
BUSINESSTYPE = 'NEW' ) C, Y_YYYYYYYY_PRODUCT@DBLINK A,
Z_ZZZZZZZZ_BENE@DBLINK B WHERE A.ITEM_ID =
C.FIELD1_CONTENT AND A.XXXXXX_ID = B.XXXXXX_ID A Plan hash value: 2832774925 ---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Inst |IN-OUT|
---------------------------------------------------------------------------------------------------------------
| 0 | INSERT STATEMENT | | | | 108K(100)| | | |
| 1 | LOAD TABLE CONVENTIONAL | | | | | | | |
| 2 | NESTED LOOPS | | 1 | 377 | 108K (1)| 00:21:39 | | |
| 3 | MERGE JOIN CARTESIAN | | 606 | 194K| 107K (1)| 00:21:25 | | |
| 4 | REMOTE | Z_ZZZZZZZZ_BENE | 1 | 177 | 10849 (1)| 00:02:11 | DBLINK | R->S |
| 5 | BUFFER SORT | | 7277 | 1080K| 96163 (1)| 00:19:14 | | |
| 6 | VIEW | | 7277 | 1080K| 96163 (1)| 00:19:14 | | |
| 7 | SORT UNIQUE | | 7277 | 412K| 96163 (1)| 00:19:14 | | |
| 8 | REMOTE | xxxxxxxx_LOG | 7278 | 412K| 96162 (1)| 00:19:14 | DBLINK | R->S |
| 9 | REMOTE | Y_YYYYYYYY_PRODUCT | 1 | 48 | 2 (0)| 00:00:01 | DBLINK | R->S |
--------------------------------------------------------------------------------------------------------------- Remote SQL Information (identified by operation id):
---------------------------------------------------- 4 - SELECT /*+ OPAQUE_TRANSFORM */ "BENE_ID","XXXXXX_ID","YYYYYYYY","BENE_TYPE","BENE_ORDER","REAL_N
AME","CERTI_TYPE","CERTI_CODE","TELEPHONE","BENE_RATE" FROM "Z_ZZZZZZZZ_BENE" "B" WHERE ("TELEPHONE"
IS NOT NULL OR "CERTI_TYPE" IS NOT NULL AND "CERTI_CODE" IS NOT NULL) AND "REAL_NAME"<>'法定受益人' AND
"REAL_NAME"<>'法定继承人' AND "REAL_NAME"<>'详见特别约定' AND "REAL_NAME"<>'祥见特别约定' AND "REAL_NAME"<>'法定'
(accessing 'DBLINK' ) 8 - SELECT /*+ OPAQUE_TRANSFORM */ "DATECODE","TABLENAME","FIELD1_CONTENT","BUSINESSTYPE" FROM
"xxxxxxxx_LOG" "xxxxxxxx_LOG" WHERE "DATECODE">=TO_DATE(' 2019-06-18 00:25:40', 'syyyy-mm-dd
hh24:mi:ss') AND "BUSINESSTYPE"='NEW' AND UPPER("TABLENAME")='Y_YYYYYYYY_PRODUCT' AND
"DATECODE"<=TO_DATE(' 2019-06-19 01:06:49', 'syyyy-mm-dd hh24:mi:ss') (accessing 'DBLINK' ) 9 - SELECT /*+ OPAQUE_TRANSFORM */ "ITEM_ID","XXXXXX_ID","XXXXXXX_1","UPDATE_TIME" FROM
"Y_YYYYYYYY_PRODUCT" "A" WHERE "ITEM_ID"=:1 AND "XXXXXX_ID"=:2 AND "XXXXXXX_1"=:3 (accessing 'DBLINK' )

  

修改后的SQL
--省略处跟原SQL相同,只不过新增了/*+ cardinality(b 2000000) */

SELECT /*+ cardinality(b 2000000) */ xxxx
FROM (
SELECT DISTINCT FIELD1_CONTENT
FROM xxxxxxxx_LOG@DBLINK
....
;

  

修改之后的执行计划

 Plan Hash Value  : 1238862255 

-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost | Time |
-----------------------------------------------------------------------------------------
| 0 | SELECT STATEMENT | | 7277 | 2081222 | 121654 | 00:24:20 |
| * 1 | HASH JOIN | | 7277 | 2081222 | 121654 | 00:24:20 |
| 2 | NESTED LOOPS | | 7277 | 1455400 | 110742 | 00:22:09 |
| 3 | VIEW | | 7277 | 1106104 | 96163 | 00:19:14 |
| 4 | HASH UNIQUE | | 7277 | 422066 | 96163 | 00:19:14 |
| 5 | REMOTE | xxxxxxxx_LOG | 7278 | 422124 | 96162 | 00:19:14 |
| 6 | REMOTE | Y_YYYYYYYY_PRODUCT | 1 | 48 | 2 | 00:00:01 |
| 7 | REMOTE | Z_ZZZZZZZZ_BENE | 2000000 | 172000000 | 10928 | 00:02:12 |
----------------------------------------------------------------------------------------- Predicate Information (identified by operation id):
------------------------------------------
* 1 - access("A"."XXXXXX_ID"="B"."XXXXXX_ID" AND "A"."XXXXXXX_1"="B"."YYYYYYYY")

  

Z_ZZZZZZZZ_BENE 大约有400万数据
修改前
SELECT xxxx
FROM (
SELECT DISTINCT FIELD1_CONTENT
FROM xxxxxxxx_LOG@DBLINK
WHERE UPPER(TABLENAME) = 'Y_YYYYYYYYY_PRODUCT'
AND DATECODE >= TO_DATE('2019-06-18 00:25:40','YYYY-MM-DD HH24:MI:SS')
AND DATECODE <= TO_DATE('2019-06-19 01:06:49','YYYY-MM-DD HH24:MI:SS')
AND BUSINESSTYPE = 'NEW'
) C,
Y_YYYYYYYY_PRODUCT@DBLINK A,
Z_ZZZZZZZZ_BENE@DBLINK B
WHERE A.ITEM_ID = C.FIELD1_CONTENT
AND A.XXXXXX_ID = B.XXXXXX_ID
AND A.XXXXXXX_1 = B.YYYYYYYY
AND B.XXXXXX_ID IS NOT NULL
AND B.REAL_NAME<>'法定受益人'
AND B.REAL_NAME<>'法定继承人'
AND B.REAL_NAME<>'详见特别约定'
AND B.REAL_NAME<>'祥见特别约定'
AND B.REAL_NAME<>'法定'
AND ( ( B.REAL_NAME IS NOT NULL
AND B.CERTI_TYPE IS NOT NULL
AND B.CERTI_CODE IS NOT NULL
)
OR
( B.REAL_NAME IS NOT NULL
AND B.TELEPHONE IS NOT NULL
)
);
  
SQL_ID acbfjjjak0vub, child number
-------------------------------------
INSERT INTO xxxxxxxxxx SELECT xxxxx FROM ( SELECT DISTINCT FIELD1_CONTENT
FROM xxxxxxxx_LOG@DBLINK WHERE UPPER(TABLENAME) =
'Y_YYYYYYYY_PRODUCT' AND DATECODE >= TO_DATE('2019-06-18
00:25:40','YYYY-MM-DD HH24:MI:SS') AND DATECODE <=
TO_DATE('2019-06-19 01:06:49','YYYY-MM-DD HH24:MI:SS') AND
BUSINESSTYPE = 'NEW' ) C, Y_YYYYYYYY_PRODUCT@DBLINK A,
Z_ZZZZZZZZ_BENE@DBLINK B WHERE A.ITEM_ID =
C.FIELD1_CONTENT AND A.XXXXXX_ID = B.XXXXXX_ID A
 
Plan hash value:
 
---------------------------------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time | Inst |IN-OUT|
---------------------------------------------------------------------------------------------------------------
| | INSERT STATEMENT | | | | 108K()| | | |
| | LOAD TABLE CONVENTIONAL | | | | | | | |
| | NESTED LOOPS | | | | 108K ()| :: | | |
| | MERGE JOIN CARTESIAN | | | 194K| 107K ()| :: | | |
| | REMOTE | Z_ZZZZZZZZ_BENE | | | ()| :: | DBLINK | R->S |
| | BUFFER SORT | | | 1080K| ()| :: | | |
| | VIEW | | | 1080K| ()| :: | | |
| | SORT UNIQUE | | | 412K| ()| :: | | |
| | REMOTE | xxxxxxxx_LOG | | 412K| ()| :: | DBLINK | R->S |
| | REMOTE | Y_YYYYYYYY_PRODUCT | | | ()| :: | DBLINK | R->S |
---------------------------------------------------------------------------------------------------------------
 
Remote SQL Information (identified by operation id):
----------------------------------------------------
 
- SELECT /*+ OPAQUE_TRANSFORM */ "BENE_ID","XXXXXX_ID","YYYYYYYY","BENE_TYPE","BENE_ORDER","REAL_N
AME","CERTI_TYPE","CERTI_CODE","TELEPHONE","BENE_RATE" FROM "Z_ZZZZZZZZ_BENE" "B" WHERE ("TELEPHONE"
IS NOT NULL OR "CERTI_TYPE" IS NOT NULL AND "CERTI_CODE" IS NOT NULL) AND "REAL_NAME"<>'法定受益人' AND
"REAL_NAME"<>'法定继承人' AND "REAL_NAME"<>'详见特别约定' AND "REAL_NAME"<>'祥见特别约定' AND "REAL_NAME"<>'法定'
(accessing 'DBLINK' )
 
- SELECT /*+ OPAQUE_TRANSFORM */ "DATECODE","TABLENAME","FIELD1_CONTENT","BUSINESSTYPE" FROM
"xxxxxxxx_LOG" "xxxxxxxx_LOG" WHERE "DATECODE">=TO_DATE(' 2019-06-18 00:25:40', 'syyyy-mm-dd
hh24:mi:ss') AND "BUSINESSTYPE"='NEW' AND UPPER("TABLENAME")='Y_YYYYYYYY_PRODUCT' AND
"DATECODE"<=TO_DATE(' 2019-06-19 01:06:49', 'syyyy-mm-dd hh24:mi:ss') (accessing 'DBLINK' )
 
- SELECT /*+ OPAQUE_TRANSFORM */ "ITEM_ID","XXXXXX_ID","XXXXXXX_1","UPDATE_TIME" FROM
"Y_YYYYYYYY_PRODUCT" "A" WHERE "ITEM_ID"=: AND "XXXXXX_ID"=: AND "XXXXXXX_1"=: (accessing 'DBLINK' )
 
 
  
修改后
SELECT /*+ cardinality(b 2000000) */ xxxx
FROM (
SELECT DISTINCT FIELD1_CONTENT
FROM xxxxxxxx_LOG@DBLINK
WHERE UPPER(TABLENAME) = 'Y_YYYYYYYYY_PRODUCT'
AND DATECODE >= TO_DATE('2019-06-18 00:25:40','YYYY-MM-DD HH24:MI:SS')
AND DATECODE <= TO_DATE('2019-06-19 01:06:49','YYYY-MM-DD HH24:MI:SS')
AND BUSINESSTYPE = 'NEW'
) C,
Y_YYYYYYYY_PRODUCT@DBLINK A,
Z_ZZZZZZZZ_BENE@DBLINK B
WHERE A.ITEM_ID = C.FIELD1_CONTENT
AND A.XXXXXX_ID = B.XXXXXX_ID
AND A.XXXXXXX_1 = B.YYYYYYYY
AND B.XXXXXX_ID IS NOT NULL
AND B.REAL_NAME<>'法定受益人'
AND B.REAL_NAME<>'法定继承人'
AND B.REAL_NAME<>'详见特别约定'
AND B.REAL_NAME<>'祥见特别约定'
AND B.REAL_NAME<>'法定'
AND ( ( B.REAL_NAME IS NOT NULL
AND B.CERTI_TYPE IS NOT NULL
AND B.CERTI_CODE IS NOT NULL
)
OR
( B.REAL_NAME IS NOT NULL
AND B.TELEPHONE IS NOT NULL
)
);
  
修改之后的执行计划
Plan Hash Value :
-----------------------------------------------------------------------------------------
| Id | Operation | Name | Rows | Bytes | Cost | Time |
-----------------------------------------------------------------------------------------
| | SELECT STATEMENT | | | | | :: |
| * | HASH JOIN | | | | | :: |
| | NESTED LOOPS | | | | | :: |
| | VIEW | | | | | :: |
| | HASH UNIQUE | | | | | :: |
| | REMOTE | xxxxxxxx_LOG | | | | :: |
| | REMOTE | Y_YYYYYYYY_PRODUCT | | | | :: |
| | REMOTE | Z_ZZZZZZZZ_BENE | | | | :: |
-----------------------------------------------------------------------------------------
Predicate Information (identified by operation id):
------------------------------------------
* - access("A"."XXXXXX_ID"="B"."XXXXXX_ID" AND "A"."XXXXXXX_1"="B"."YYYYYYYY")

通过hint干掉笛卡尔积的更多相关文章

  1. 数据库之SQL笛卡尔积

    1.笛卡尔积定义 笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join).所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表 ...

  2. mongodb之使用explain和hint性能分析和优化

    当你第一眼看到explain和hint的时候,第一个反应就是mysql中所谓的这两个关键词,确实可以看出,这个就是在mysql中借鉴过来的,既然是借鉴 过来的,我想大家都知道这两个关键字的用处,话不多 ...

  3. {"errcode":40097,"errmsg":"invalid args hint: [vjNe7xxxxxx8vr19]"}——记录一次微信错误处理

    错误情况概述: 启动应用之后,微信调用 相机拍照 等接口是可以正常使用的, 但是过了一段时间(2个小时左右--token/jsapi_ticket的过期时间),微信调用相机拍照的功能失效,启用debu ...

  4. 【转】Oracle索引HINT的使用

    转自:Oracle索引HINT的使用       存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...

  5. 干掉命令行窗口下MySql乱码

    晚上重温dos窗口操作mysql的时候,遇到了一个巨蛋疼的问题------>中文验证码  -->_-->,所以找了找资料弄懂了怎么解决乱码问题,,小记一下. 新建一个表 create ...

  6. 干掉Unity3D

    我为什么想干掉Unity3D? 这个问题容我不答,每个做技术的人总有一些完美主义. 你使用u3d的过程中是不是痛并快乐着呢. 就从两个国内具有相当普遍性的痛点说起. il2cpp,unity作出了这个 ...

  7. 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合

           本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...

  8. mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化

    先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...

  9. sql monitor生成不了报告& FFS hint不生效两个问题思考

    事情的发生就是这么偶然,一步步的深入才能汲取到更深入的知识~~ -------------------START------------------------------------------- ...

随机推荐

  1. 在JMeter测试计划中如何控制业务比例

    作者:Selingchen 来源:CSDN 原文:https://blog.csdn.net/selingchen/article/details/47844375

  2. c# Winform实现发送邮件

    邮件发送类 来源网上 稍作调整...出处忘了 /** * 命名空间: EmailSend * 类 名: EmailSend * * 作者        变更内容            变更日期 * ─ ...

  3. python调用tushare获取沪深A股票资金流向数据

    接口:moneyflow 描述:获取沪深A股票资金流向数据,分析大单小单成交情况,用于判别资金动向 限量:单次最大提取4000行记录,总量不限制 积分:用户需要至少1500积分才可以调取,基础积分有流 ...

  4. Neo4J(Cypher语句)初识

    欢迎各路大神临幸寒舍 以下节点标签为people,friend,用户自己也可以设置成其他标签,查询时需要用到标签.这个标签可以类比为关系数据库中的表名 创建节点.关系 创建节点(小明):create ...

  5. Python之OS(系统操作)模块常用函数

    mkdir(path[, mode=0777]) makedirs(name,mode=511) rmdir(path) removedirs(path) listdir(path) getcwd() ...

  6. js中构造函数的原型添加成员的两种方式

    首先,js中给原型对象添加属性和方法. 方式一:对象的动态特效 给原型对象添加成员 语法:构造函数.prototype.方法名=function (){ } 方式二:替换原型对象(不是覆盖,而是替换, ...

  7. linux基础重定向,用户,组,以及权限管理

    一.重定向 标准输出standard output1>,>> 标准错误输出standard error output22>,2>> 标准输出设备::显示器 标准输入 ...

  8. 数据结构:堆(Heap)

    堆就是用数组实现的二叉树,所有它没有使用父指针或者子指针.堆根据"堆属性"来排序,"堆属性"决定了树中节点的位置. 堆的常用方法: 构建优先队列 支持堆排序 快 ...

  9. 理解 Activity.runOnUiThread

    在开发 Android 应用的时候我们总是要记住应用主线程. 主线程非常繁忙,因为它要处理绘制UI,响应用户的交互,默认情况下执行我们写下的大部分代码. 好的开发者知道他/她需要将重负荷的任务移除到工 ...

  10. icomoon字体图标引用代码

    1.第一步在样式里声明字体:告诉别人我们自己定义的字体. @font-face{ /*声明字体 引用字体*/ font-family:'icomoon'; src:url('fonts/icomoon ...