duckkeeper 2015-12-04 01:25 采纳率: 0%
浏览 2413

【求助】ORACLE中的SQL优化,涉及到用OR该怎么优化?

各位大神,小弟最近在执行以下sql时发现执行时间超长,跑完一次差不多要十小时,看执行计划就是卡在OR那里,现在想请教大神下面语句中的OR该做何种优化?补充说明:涉及到的各个字段已有索引,D表数据量在4200左右,T表全量在1000W左右,在子查询里做筛选后的TT数据量在300W左右。
已无分可用~跪求好人~

 SELECT
  D.ADDRESS_LEVEL_CODE
, COUNT(TT.UUID) AS BE_CHECK_WOMEN
FROM DIM_ADDRESS D
LEFT JOIN
(
SELECT T.UUID,T.HOUSEHOLD_LEVEL_CODE,T.RESIDENCE_LEVEL_CODE
FROM DIM_RESIDENT T
WHERE FLOOR(MONTHS_BETWEEN(SYSDATE, T.BIRTH_DATE) / 12) >= 15
AND FLOOR(MONTHS_BETWEEN(SYSDATE, T.BIRTH_DATE) / 12) <= 50
AND T.GENDER_CODE = '2' 
AND T.IS_ACTIVE = '1'
) TT ON TT.HOUSEHOLD_LEVEL_CODE LIKE CONCAT(D.ADDRESS_LEVEL_CODE,'%') OR TT.RESIDENCE_LEVEL_CODE LIKE CONCAT(D.ADDRESS_LEVEL_CODE,'%')
WHERE D.LEVEL_DEPTH <> '6'
AND D.IS_ACTIVE = '1'
GROUP BY D.ADDRESS_LEVEL_CODE
  • 写回答

4条回答 默认 最新

  • _BenChen 2015-12-04 02:30
    关注

    SELECT ADDRESS_LEVEL_CODE
    , COUNT(UUID) AS BE_CHECK_WOMEN
    FROM
    ( SELECT
    D.ADDRESS_LEVEL_CODE
    , TT.UUID
    FROM DIM_ADDRESS D
    LEFT JOIN
    (
    SELECT T.UUID,T.HOUSEHOLD_LEVEL_CODE,T.RESIDENCE_LEVEL_CODE
    FROM DIM_RESIDENT T
    WHERE FLOOR(MONTHS_BETWEEN(SYSDATE, T.BIRTH_DATE) / 12) >= 15
    AND FLOOR(MONTHS_BETWEEN(SYSDATE, T.BIRTH_DATE) / 12) <= 50
    AND T.GENDER_CODE = '2'
    AND T.IS_ACTIVE = '1'
    ) TT ON TT.HOUSEHOLD_LEVEL_CODE LIKE CONCAT(D.ADDRESS_LEVEL_CODE,'%')
    WHERE D.LEVEL_DEPTH <> '6'
    AND D.IS_ACTIVE = '1'
    UNION ALL
    SELECT
    D.ADDRESS_LEVEL_CODE
    , TT.UUID
    FROM DIM_ADDRESS D
    LEFT JOIN
    (
    SELECT T.UUID,T.HOUSEHOLD_LEVEL_CODE,T.RESIDENCE_LEVEL_CODE
    FROM DIM_RESIDENT T
    WHERE FLOOR(MONTHS_BETWEEN(SYSDATE, T.BIRTH_DATE) / 12) >= 15
    AND FLOOR(MONTHS_BETWEEN(SYSDATE, T.BIRTH_DATE) / 12) <= 50
    AND T.GENDER_CODE = '2'
    AND T.IS_ACTIVE = '1'
    ) TT ON TT.RESIDENCE_LEVEL_CODE LIKE CONCAT(D.ADDRESS_LEVEL_CODE,'%')
    WHERE D.LEVEL_DEPTH <> '6'
    AND D.IS_ACTIVE = '1'
    ) tmp
    GROUP BY ADDRESS_LEVEL_CODE

    评论

报告相同问题?

悬赏问题

  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容