为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:
【操作系统】:
【CPU】:
【问题描述】*:同一个sql,用inner join连接两个表多个字段就非常慢,但是改成left join然后用条件过滤就是正常速度。
SELECT T1.BH
FROM (
SELECT BH, COALESCE(T.DMMC, '-1') AS DMMC, COALESCE(T.DMJMC, '-1') AS DMJMC, COALESCE(T.DMZ, '-1') AS DMZ, COALESCE(T.BZLX, '-1') AS BZLX, COALESCE(T.SJDMBH, '-1') AS SJDMBH, COALESCE(T.MS, '-1') AS MS, COALESCE(T.SFQY, '-1') AS SFQY
FROM A T
WHERE DRRWBH = '2019329040070086656' ) T1
-- LEFT JOIN (
INNER JOIN (
SELECT COALESCE(A.DMMC, '-1') AS DMMC, COALESCE(B.DMJMC, '-1') AS DMJMC, COALESCE(A.DMZ, '-1') AS DMZ, COALESCE(A.BZLX, '-1') AS BZLX, COALESCE(C.DMZ, '-1') AS SJDMBH, COALESCE(A.MS, '-1') AS MS, COALESCE(A.SFQY, '-1') AS SFQY
FROM B A
LEFT JOIN C B ON A.DMJBH = B.DMJBH
LEFT JOIN (SELECT DMXBH, DMZ FROM B WHERE YXJSSJ = TO_DATE('9999-12-31 23:59:59','YYYY-MM-DD HH24:MI:SS') AND BGBJ NOT IN ('D')) C ON C.DMXBH = A.SJDMBH
WHERE A.YXJSSJ = TO_DATE('9999-12-31 23:59:59','YYYY-MM-DD HH24:MI:SS') AND A.BGBJ NOT IN ('D')
AND B.SFSC = '0' AND B.YXJSSJ = TO_DATE('9999-12-31 23:59:59','YYYY-MM-DD HH24:MI:SS')
) T2
ON T1.DMJMC = T2.DMJMC AND T1.DMMC= T2.DMMC AND T1.DMZ=T2.DMZ AND T1.SFQY= T2.SFQY AND T1.MS= T2.MS AND T1.SJDMBH= T2.SJDMBH AND T1.BZLX= T2.BZLX
-- WHERE T2.DMMC IS NOT NULL

这个sql多个数据库都是正常的,只有达梦有这个问题,是正常情况吗,sql加上/*+ ORDERED USE_HASH(T1 T2) NO_USE_NL(T1 T2) */让其走hashjoin也是一样的慢