通过hint干掉笛卡尔积
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相同,只不过新增了/*+ 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")
通过hint干掉笛卡尔积的更多相关文章
- 数据库之SQL笛卡尔积
1.笛卡尔积定义 笛卡尔积在SQL中的实现方式既是交叉连接(Cross Join).所有连接方式都会先生成临时笛卡尔积表,笛卡尔积是关系代数里的一个概念,表示两个表中的每一行数据任意组合,上图中两个表 ...
- mongodb之使用explain和hint性能分析和优化
当你第一眼看到explain和hint的时候,第一个反应就是mysql中所谓的这两个关键词,确实可以看出,这个就是在mysql中借鉴过来的,既然是借鉴 过来的,我想大家都知道这两个关键字的用处,话不多 ...
- {"errcode":40097,"errmsg":"invalid args hint: [vjNe7xxxxxx8vr19]"}——记录一次微信错误处理
错误情况概述: 启动应用之后,微信调用 相机拍照 等接口是可以正常使用的, 但是过了一段时间(2个小时左右--token/jsapi_ticket的过期时间),微信调用相机拍照的功能失效,启用debu ...
- 【转】Oracle索引HINT的使用
转自:Oracle索引HINT的使用 存储在数据库中数据的分布情况开发人员或管理员比Oracle优化器更加的清楚,在优化器不能作出最有查询路径选择的情况下,使用HINT(提示)人为的固定查 ...
- 干掉命令行窗口下MySql乱码
晚上重温dos窗口操作mysql的时候,遇到了一个巨蛋疼的问题------>中文验证码 -->_-->,所以找了找资料弄懂了怎么解决乱码问题,,小记一下. 新建一个表 create ...
- 干掉Unity3D
我为什么想干掉Unity3D? 这个问题容我不答,每个做技术的人总有一些完美主义. 你使用u3d的过程中是不是痛并快乐着呢. 就从两个国内具有相当普遍性的痛点说起. il2cpp,unity作出了这个 ...
- 【原创】开源.NET排列组合组件KwCombinatorics使用(三)——笛卡尔积组合
本博客所有文章分类的总目录:本博客博文总目录-实时更新 本博客其他.NET开源项目文章目录:[目录]本博客其他.NET开源项目文章目录 KwCombinatorics组件文章目录: 1. ...
- mysql,SQL标准,多表查询中内连接,外连接,自然连接等详解之查询结果集的笛卡尔积的演化
先附上数据. CREATE TABLE `course` ( `cno` ) NOT NULL, `cname` ) CHARACTER SET utf8 NOT NULL, `ctime` ) NO ...
- sql monitor生成不了报告& FFS hint不生效两个问题思考
事情的发生就是这么偶然,一步步的深入才能汲取到更深入的知识~~ -------------------START------------------------------------------- ...
随机推荐
- leetcode.矩阵.378有序矩阵中第K小的元素-Java
1. 具体题目 给定一个 n x n 矩阵,其中每行和每列元素均按升序排序,找到矩阵中第k小的元素.请注意,它是排序后的第k小元素,而不是第k个元素. 示例: matrix = [ [ 1, 5, ...
- Queue与Deque的区别
前言 在研究java集合源码的时候,发现了一个很少用但是很有趣的点:Queue以及Deque,平常在写leetcode经常用LinkedList向上转型Deque作为栈或者队列使用,但是一直都不知 ...
- Struts2的Action访问
● 示例项目结构 ● demo1.jsp <%@ page language="java" import="java.util.*" pageEncod ...
- jumpserver3.0页面配置
一.jumpserver的启动 1 2 Jumpserver的启动和重启 [root@test-vm001 install]# /opt/jumpserver/service.sh start/res ...
- LeetCode Array Easy 189. Rotate Array
---恢复内容开始--- Description Given an array, rotate the array to the right by k steps, where k is non-ne ...
- Centos7系统安装笔记
Centos 7安装步骤 对应参数,可修改 1.一台主机对应一个服务器,需要先安装Centos 7(内网)2.F12 boot 进入boot模式3.选择安装方式:USE或其他4.根据底部文字提示,点击 ...
- 使用source insert 查看Linux内核源码
先配置下source insert软件,添加工程文件时可以支持各种类型的文件 “ Options ” --> “ Preferences ” ---> “ Languages ” ---& ...
- app混合开发 fastlick.js 在ios上 input标签点击 不灵敏 处理
ios11 上有这个问题 而老版本的ios没有 会出现这个的原因是使用fastclick.js点击后input没有获取焦点,所以只需要在fasyclick的源码的这个位置 可以直接在源码内搜索关键字找 ...
- pygame征途:(一)图片移动反弹
题目大意: 就是弄一张图片在背景画布上移动,然后碰到边界就图片翻转并且反向移动 基本思路: 需要pygame常用的一些常用的函数,然后基本就是在背景画布上blit一张图片,然后移动就是先全刷成背景画布 ...
- vue eslint修改为4个空格