首页 > 解决方案 > 自联接 SQL 执行时间过长

问题描述

下面的 SQL 花费了太多时间来执行。不知道哪里做错了,但可以得到正确的结果。我可以进一步简化这个 sql。这是 oracle db,jmc_job_step 表包含大量记录。

select *
 from
        jmc_job_run_id jobrunid0_ 
    inner join
        jmc_job_step jobsteps1_ 
            on jobrunid0_.id=jobsteps1_.job_run_id
    where
        (
            jobsteps1_.creation_date in (
                select
                    min(jobstep2_.creation_date) 
                from
                    jmc_job_step jobstep2_ 
                where
                    jobrunid0_.id=jobstep2_.job_run_id 
                group by
                    jobstep2_.job_run_id ,
                    jobstep2_.job_step_no
            ) 

            )
            or jobsteps1_.job_step_progress_value in (
                select
                    max(jobstep3_.job_step_progress_value) 
                from
                    jmc_job_step jobstep3_ 
                where
                    jobrunid0_.id=jobstep3_.job_run_id 
                group by
                    jobstep3_.job_run_id ,
                    jobstep3_.job_step_no
            )
        ) 
    order by
        jobrunid0_.job_start_time desc

标签: sqloracle

解决方案


这是没用的;它说“我不在乎那些列包含什么”,但是 - 然而 - 你让数据库引擎检查这些值。

    (
        upper(jobrunid0_.tenant_id) like '%'|| null
    ) 
    and (
       upper(jobrunid0_.job_run_id) like '%'||null||'%'
    ) 

推荐阅读