Я получил следующие два SQL, которые возвращают один и тот же результат, я ожидал, что SQL2 будет быстрее, чем SQL1, но оказывается, что SQL1 был в 5 раз быстрее, чем SQL2.Может ли кто-нибудь объяснить это мне?Заранее спасибо.
SQL1: 2 seconds
select count(*) from (
select * from (
SELECT distinct job_id, REGEXP_SUBSTR(JOB_Description, '(ABC|CDE)([[:digit:]]){5}', 1, LEVEL) AS substr
FROM (
select job_id, JOB_DESCRIPTION from smms.job where TO_NUMBER(to_char(CREATE_DATE,'YYYY'))=2017
)
CONNECT BY LEVEL <= REGEXP_COUNT(JOB_Description, '(ABC|CDE)([[:digit:]]){5}')
and prior job_description = job_description
AND PRIOR DBMS_RANDOM.VALUE IS NOT null
order by job_id
) **where substr is not null**);
SQL2: 11 seconds
select count(*) from (
SELECT distinct job_id, REGEXP_SUBSTR(JOB_Description, '(ABC|CDE)([[:digit:]]){5}', 1, LEVEL) AS substr
FROM (
select job_id, JOB_DESCRIPTION from smms.job where TO_NUMBER(to_char(CREATE_DATE,'YYYY'))=2017 **and REGEXP_COUNT(JOB_Description, '(ABC|CDE)([[:digit:]]){5}')>0**
)
CONNECT BY LEVEL <= REGEXP_COUNT(JOB_Description, '(ABC|CDE)([[:digit:]]){5}')
and prior job_description = job_description
AND PRIOR DBMS_RANDOM.VALUE IS NOT null
order by job_id
);