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. oracle知识博客链接

    http://blog.csdn.net/YiQiJinBu/article/category/1100395/1

  2. linux/unix下setuid/seteuid/setreuid/setresuid

    其中setresuid()具有最清晰的语法: setresuid()被执行的条件有: ①当前进程的euid是root ②三个参数,每一个等于原来某个id中的一个 如果满足以上条件的任意一个,setre ...

  3. BUUCTF PWN部分题目wp

    pwn好难啊 PWN 1,连上就有flag的pwnnc buuoj.cn 6000得到flag 2,RIP覆盖一下用ida分析一下,发现已有了system,只需覆盖RIP为fun()的地址,用peda ...

  4. Go 语言变量、常量

    变量 第一种,指定变量类型,声明后若不赋值,使用默认值. var v_name v_type v_name = value 第二种,根据值自行判定变量类型. var v_name = value 第三 ...

  5. Android开发——回调(Callback)

    1. 回调函数的定义: 在A类中定义了一个方法,这个方法中用到了一个接口和该接口中的抽象方法,但是抽象方法没有具体的实现,需要B类去实现,B类实现该方法后,它本身不会去调用该方法,而是传递给A类,供A ...

  6. MS14-068利用

    漏洞原理详情后续补上:kerberos 协议实现过程中的某些 bug,致使普通域用户可以任意伪造高权限 PAC,去请求 TGS 从而导致的权限提升,漏洞现在很少遇到了. 一.利用 需要拥有一个域账号的 ...

  7. linux常用命令-1系统相关命令

    hostname #计算机名 passwd #修改密码 reboot #重启 shutdown –r now #立刻重启(root用户使用) shutdown –r 10 #过10分钟自动重启(roo ...

  8. 【LeetCode】Hash

    [451] Sort Characters By Frequency [Medium] 给一个字符串,要求返回按照字母出现频率的排序后的字符串.(哈希表+桶排) 有个技巧是Hash用Value作为In ...

  9. mybatis快速搭建

    结构图 1.创建maven项目 2.引入依赖 <dependency> <groupId>mysql</groupId> <artifactId>mys ...

  10. 手机号码格式验证和 FASTDFS 工具类

    常见大陆和香港号码格式验证 import java.util.regex.Matcher; import java.util.regex.Pattern; import java.util.regex ...