Оптимизация SQL: превышен лимит вызовов при использовании процессора - PullRequest
0 голосов
/ 12 ноября 2019

Нужна помощь в оптимизации приведенного ниже запроса. Цель состоит в том, чтобы получить количество a.subscriber_no, которые попадают в каждый сегмент, на основе их tbl1.duration (продолжительность контракта 0/24 / 1-23 /> 24). Я могу выполнить запрос без COUNT, и он извлекает 22 миллиона записей. С COUNT я получаю ошибку: ORA-02393: превышен лимит вызовов при использовании процессора. Любые идеи о том, как оптимизировать / обойти это? Гуглил / переписывал это несколько дней.

SELECT 
    COUNT(CASE WHEN tbl1.duration = 0 then 1 ELSE NULL END) as "0 term",
    COUNT(CASE WHEN tbl1.duration = 24 then 1 ELSE NULL END) as "24 term",
    COUNT(CASE WHEN tbl1.duration between 1 and 23 then 1 ELSE NULL END) as "term >0 and <24",
    COUNT(CASE WHEN tbl1.duration > 24 then 1 ELSE NULL END) as "term > 24"
from  
    (Select
    a.subscriber_no,
    max(b.commit_start_date),
    max(b.commit_end_date),
    round (months_between(to_date(max(b.commit_end_date)),to_date(max(b.commit_start_date))),0) as duration,
    max(b.EFFECTIVE_DATE)
    from sales a
    join contract b on a.subscriber_no = b.subscriber_no
    join subscriber c on a.subscriber_no = c.subscriber_no
    where a.type = 'F'
    and c.sub_status = 'Y'
    group by
    a.subscriber_no) tbl1;```

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...