暂无图片
merge into的性能问题
我来答
分享
张明轩
2022-06-29
merge into的性能问题
暂无图片 100M

语句如下:

MERGE INTO table A USING ( SELECT INNER_NO, BILL_FORMAT,
SA_ACCT_NO, SA_OPEN_BRANCH, ACCT_NAME, SA_TX_DT, SA_TX_BRANCH,
SA_OPR_NO, CURR_CODE, CURR_NAME, SA_TX_LOG_NO, SA_TX_CODE, DC_FLAG,
SA_TX_AMT, SA_USAGE, DOC_TYP_CODE, DOC_TYP, DOC_NO, SA_JSFS,
CHANNEL_NO, SA_TX_TYPE, SA_OP_ACCT_NO, SA_OP_CUST_NAME, APPEND_FIELDS,
QRCODE_STRING, IS_PATCH, PRINT_CNTS, NEED_RECORD, RECORD_FINISH,
RECORD_TIME, RECORD_BRANCH, RECORD_OPER, RECORD_FORMAT, FCM_ROWID,
LOG_TIME, AUTHORIZER, RECORD_ATTBRH, RED_FLAG, NEED_HIDE, TX_LOG_NO
FROM table_TMP WHERE TX_LOG_NO IS NOT NULL AND SA_ACCT_NO
IS NOT NULL AND SA_JSFS IS NOT NULL ) B ON (A.SA_TX_DT=B.SA_TX_DT AND
A.TX_LOG_NO=B.TX_LOG_NO ) WHEN MATCHED THEN UPDATE SET
A.INNER_NO=B.INNER_NO,A.BILL_FORMAT=B.BILL_FORMAT,A.SA_ACCT_NO=B.SA_ACCT
_NO, A.SA_OPEN_BRANCH=B.SA_OPEN_BRANCH,A.ACCT_NAME=B.ACCT_NAME,
A.SA_TX_BRANCH=B.SA_TX_BRANCH,A.SA_OPR_NO=B.SA_OPR_NO,
A.CURR_CODE=B.CURR_CODE,A.CURR_NAME=B.CURR_NAME,
A.SA_TX_LOG_NO=B.SA_TX_LOG_NO,A.SA_TX_CODE=B.SA_TX_CODE,
A.DC_FLAG=B.DC_FLAG,A.SA_TX_AMT=B.SA_TX_AMT,A.SA_USAGE=B.SA_USAGE,
A.DOC_TYP_CODE =B.DOC_TYP_CODE ,A.DOC_TYP=B.DOC_TYP,A.DOC_NO=B.DOC_NO,
A.SA_JSFS=B.SA_JSFS,A.CHANNEL_NO=B.CHANNEL_NO,A.SA_TX_TYPE=B.SA_TX_TYPE,
 A.SA_OP_ACCT_NO=B.SA_OP_ACCT_NO,A.SA_OP_CUST_NAME=B.SA_OP_CUST_NAME,
A.APPEND_FIELDS=B.APPEND_FIELDS,A.QRCODE_STRING=B.INNER_NO,
A.IS_PATCH=B.IS_PATCH,A.PRINT_CNTS=B.PRINT_CNTS,A.NEED_RECORD=B.NEED_REC
ORD, A.RECORD_FINISH=B.RECORD_FINISH,A.RECORD_ATTBRH=B.RECORD_ATTBRH,
A.RED_FLAG=B.RED_FLAG,A.NEED_HIDE=B.NEED_HIDE WHEN NOT MATCHED THEN
INSERT VALUES ( B.INNER_NO, B.BILL_FORMAT, B.SA_ACCT_NO,
B.SA_OPEN_BRANCH,B.ACCT_NAME, B.SA_TX_DT,
B.SA_TX_BRANCH,B.SA_OPR_NO,B.CURR_CODE,B.CURR_NAME, B.SA_TX_LOG_NO,
B.SA_TX_CODE, B.DC_FLAG,B.SA_TX_AMT,B.SA_USAGE, B.DOC_TYP_CODE,
B.DOC_TYP, B.DOC_NO, B.SA_JSFS, B.CHANNEL_NO, B.SA_TX_TYPE,
B.SA_OP_ACCT_NO, B.SA_OP_CUST_NAME, B.APPEND_FIELDS, B.INNER_NO,
B.IS_PATCH, B.PRINT_CNTS, B.NEED_RECORD, B.RECORD_FINISH,
B.RECORD_TIME, B.RECORD_BRANCH, B.RECORD_OPER, B.RECORD_FORMAT,
B.FCM_ROWID, B.LOG_TIME, B.AUTHORIZER, B.RECORD_ATTBRH, B.RED_FLAG,
B.NEED_HIDE, B.TX_LOG_NO )

执行计划如下:

Plan hash value: 1753905604

-------------------------------------------------------------------------------------------------------------------------------
| Id  | Operation                             | Name                  | Rows  | Bytes | Cost (%CPU)| Time     | Pstart| Pstop |
-------------------------------------------------------------------------------------------------------------------------------
|   0 | MERGE STATEMENT                       |                       |       |       |   784K(100)|          |       |       |
|   1 |  MERGE                                | table                 |       |       |            |          |       |       |
|   2 |   VIEW                                |                       |       |       |            |          |       |       |
|   3 |    NESTED LOOPS OUTER                 |                       |   258K|   434M|   784K  (1)| 02:36:52 |       |       |
|   4 |     TABLE ACCESS FULL                 | table_TMP             |   258K|   218M|  8550   (1)| 00:01:43 |       |       |
|   5 |     TABLE ACCESS BY GLOBAL INDEX ROWID| table                 |     1 |   875 |     3   (0)| 00:00:01 | ROWID | ROWID |
|   6 |      INDEX RANGE SCAN                 | SYS_C0013050          |     1 |       |     3   (0)| 00:00:01 |       |       |
-------------------------------------------------------------------------------------------------------------------------------


51 rows selected.

NESTED LOOPS OUTER部分是否可以优化? 

我来答
添加附件
收藏
分享
问题补充
4条回答
默认
最新
Uncopyrightable

单表查询是不是就行了


暂无图片 评论
暂无图片 有用 0
张明轩
题主
2022-06-29
不太懂您的意思
吾喾

table_TMP加8或者16并行?

暂无图片 评论
暂无图片 有用 0
赵勇

加个提示/*+ use_hash(a) */,然后explain plan for 看看执行计划是什么?

explain plan for
MERGE /*+ use_hash(a) */ INTO table A USING ( SELECT INNER_NO, BILL_FORMAT,
.......

select * from table(dbms_xplan.display);

暂无图片 评论
暂无图片 有用 0

将三个is not null替换成函数有效么?nvl(TX_LOG_NO,0)<> 0 and  nvl(SA_ACCT_NO,0)<> 0 and nvl(SA_JSFS,0)<> 0

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏