为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:8
【操作系统】:
【CPU】:
【问题描述】*:我需要对比:t_case_comparison_details_2、T_AP_FILE_DETAIL两表某些数据是否存在一些字段内容相同的,然后更新t_case_comparison_details_2数据的状态。
t_case_comparison_details_2表有1w数据,T_AP_FILE_DETAIL有20w数据。执行了大概三十分钟结果都没出来,不知道是什么情况......
SQL语句如下:
UPDATE
t_case_comparison_details_2 t1
SET t1.IS_PASS = 3
WHERE t1.batch_id = 'd76689e44f034f2d8bb83c68eb794445'
AND t1.is_pass = 4
AND EXISTS(SELECT 1
FROM T_AP_FILE_DETAIL t2
WHERE t2.DELETE_STATE = '0'
AND substr(t2.ajnd, 1, 4) = substr('2023-01-01', 1, 4)
AND substr(t1.SLSJ, 1, 4) = substr(t2.ajnd, 1, 4)
AND t2.reason IS NOT NULL
AND t2.xyr IS NOT NULL
AND t2.cbr IS NOT NULL
AND (trim(t1.AJMC) NOT LIKE '%' || trim(triling '罪' FROM t2.reason) || '%'
AND trim(t1.AJMC) NOT LIKE '%' || trim(triling '案' FROM t2.reason) || '%' )
AND t2.CBR LIKE '%' || REGEXP_REPLACE(t1.CBR,'[,、,]','')|| '%'
AND t1.AJMC LIKE '%' || t2.xyr || '%' );
再附上一个达梦管理工具的预估执行计划:
信息有限,简单提供一下思路
1、T_CASE_COMPARISON_DETAILS_2_BATCH_ID_IDX索引可以加一下IS_PASS字段,避免索引回表后过滤;
2、可以考虑给t2的substr(ajnd, 1, 4)创建函数索引,试试关联方式做成t1 NL驱动 t2;
3、数据库参数是否进行过优化配置;
4、建议检查一下磁盘io速率;
select * from v$trxwait;是不是您这个update阻塞啦?
这个数据量级,什么计划,都会很快的,30分钟出不来,99.999%阻塞了,0.00001%是磁盘太差。
统计信息收集一下。感觉t1 有问题