Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
 Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
автор
select
t1.DDATES,
initcap(to_char(t1.DDATES,'DAY','NLS_DATE_LANGUAGE=RUSSIAN')) P_D_RUS,

((SELECT NULL FROM DUAL)
||'['||
(SELECT COUNT (*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))
||']'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=20319110
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=24439460
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=21178087
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=33232
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=33233
AND nvl(HOSP_HISTORY_DS,0) = 0 ))

as DAY_TOTAL,


-- НО-1

((SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD where trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy')
AND HOSP_PLAN_KIND=75600447 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/
AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))
||' ('||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy')
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=20319110 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447
and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=24439460 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy')
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=21178087 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy')
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=33232 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy')
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=33232 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)||')'

) as NO_1_TOTAL


from
table (cast (d_pkg_dat_tools.DATES_IN_RANGE(to_date('01-07-2018', 'dd-mm-yyyy'),to_date('31-07-2018', 'dd-mm-yyyy'),1) as D_CL_DATE)) t1
order by t1.DDATES



Выкладываю кусок кода т.к весь запрос состоит из 6 кусков кода ,включая вложенные подзапросы.
Запрос выполняется оч.долго, коллеги которые работают в программе с этим отчетом просто вешаются,когда он формируется по 10 минут
Вопрос, как убрать подзапросы или как мне его правильно оптимизировать ?
11 июл 18, 13:10    [21562112]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1057
Александер234,

почитать про PIVOT или реализацию на CASE/DECODE в версиях, его не поддерживающих...
11 июл 18, 13:15    [21562145]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1057
Александер234,

CASE/DECODE-ный вариант
11 июл 18, 13:16    [21562156]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1057
Александер234
select
t1.DDATES,
initcap(to_char(t1.DDATES,'DAY','NLS_DATE_LANGUAGE=RUSSIAN')) P_D_RUS,

((SELECT NULL FROM DUAL) 
||'['|| 
(SELECT COUNT (*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))
||']'|| 
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=20319110
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=24439460
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=21178087
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=33232
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=33233
AND nvl(HOSP_HISTORY_DS,0) = 0 ))

as DAY_TOTAL,


-- НО-1 

((SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD where trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') 
AND HOSP_PLAN_KIND=75600447 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/
AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))
||' ('||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') 
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=20319110 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 
and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=24439460 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') 
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=21178087 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') 
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=33232 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') 
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=33232 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)||')'

) as NO_1_TOTAL


from
table (cast (d_pkg_dat_tools.DATES_IN_RANGE(to_date('01-07-2018', 'dd-mm-yyyy'),to_date('31-07-2018', 'dd-mm-yyyy'),1) as D_CL_DATE)) t1
order by t1.DDATES



Выкладываю кусок кода т.к весь запрос состоит из 6 кусков кода ,включая вложенные подзапросы.
Запрос выполняется оч.долго, коллеги которые работают в программе с этим отчетом просто вешаются,когда он формируется по 10 минут
Вопрос, как убрать подзапросы или как мне его правильно оптимизировать ?


Хотя, всё равно - нечитабельно...
11 июл 18, 13:17    [21562161]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
Щукина Анна,читал я про pivot, но дело в том , что он мне все суммирует т к таблица у меня одна точнее представление, а данные то нужно достать разные из этого представленияб согласно условиям. Как быть не знаю

Вот как делал :

автор
SELECT * FROM (
SELECT COUNT(*) cnt, 'HOSP_PLAN_KIND' id FROM D_V_HPK_PLAN_JOURNALS_ADD
where trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy')
AND PAYMENT_KIND_ID in 20319110
UNION ALL
SELECT COUNT(*) cnt, 'HOSP_PLAN_KIND' id FROM D_V_HPK_PLAN_JOURNALS_ADD
where trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy')
AND PAYMENT_KIND_ID in 24439460
UNION ALL
SELECT COUNT(*) cnt, 'HOSP_PLAN_KIND' id FROM D_V_HPK_PLAN_JOURNALS_ADD
where trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy')
AND PAYMENT_KIND_ID in 33232
) pivot ( min (cnt) FOR id IN ( 'HOSP_PLAN_KIND' AS OMS, 'HOSP_PLAN_KIND' AS VMP, 'HOSP_PLAN_KIND' AS FED) )
11 июл 18, 13:20    [21562179]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
Щукина Анна,

не понял тут ??
11 июл 18, 13:24    [21562203]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1057
Александер234
Как быть не знаю
Предоставить удобняе для использования тестовые данные, желаемый результат на них и словесное описание сути "хотелки"....
11 июл 18, 13:26    [21562211]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
Щукина Анна, Щас попытаюсь объяснить как могу
11 июл 18, 13:27    [21562220]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1057
Александер234
Щукина Анна,

не понял тут ??

0) вам было предложено переписать запрос через PIVOT или его аналоги на CASE/DECODE
1) вам была дана ссылка на описание того, как "развернуть" результат при помощи decode
2) ваш пост был подправлен, в него было вставлено форматирование, чтобы код выглядел как код, а не как остальной текст сообщения

что из этого у вас вызвало непонимание
11 июл 18, 13:28    [21562228]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
andreymx
Member

Откуда: Запорожье
Сообщений: 48167
прощай, индекс
 and trunc(PLAN_DATE)=trunc(t1.DDATES)
11 июл 18, 13:28    [21562231]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
Щукина Анна, 2) пункт был не понятен ,теперь пояснили спс.
11 июл 18, 13:29    [21562235]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1057
andreymx
прощай, индекс
 and trunc(PLAN_DATE)=trunc(t1.DDATES)
и так - 10 раз подряд :)
11 июл 18, 13:30    [21562252]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 583
Щукина Анна,

Начинайте по кусочкам
1. Вот это вложенное убожество
((SELECT NULL FROM DUAL) 
||'['|| 
(SELECT COUNT (*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))
||']'|| 
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=20319110
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=24439460
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=21178087
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=33232
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=33233
AND nvl(HOSP_HISTORY_DS,0) = 0 ))


превратите вот в такое например:
(select null
||'['||
count(1)
||']'|| 
count(case when PAYMENT_KIND_ID=20319110 AND nvl(HOSP_HISTORY_DS,0) = 0 then 1 end)
||'/'||count(case when PAYMENT_KIND_ID=24439460 AND nvl(HOSP_HISTORY_DS,0) = 0 then 1 end)
||'/'||count(case when PAYMENT_KIND_ID=21178087 AND nvl(HOSP_HISTORY_DS,0) = 0 then 1 end)
||'/'||count(case when PAYMENT_KIND_ID=33232    AND nvl(HOSP_HISTORY_DS,0) = 0 then 1 end)
||'/'||count(case when PAYMENT_KIND_ID=33233    AND nvl(HOSP_HISTORY_DS,0) = 0 then 1 end)
FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))
11 июл 18, 13:36    [21562297]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Щукина Анна
Member

Откуда:
Сообщений: 1057
MaximaXXL,

будьте, пожалуйста, внимательнее, когда отвечаете адресно. Я - не ТС, мне можно не отвечать ;)
11 июл 18, 13:39    [21562318]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
Друзья спокойствие только спокойствие
11 июл 18, 13:48    [21562365]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
MaximaXXL, На счет этого убожества полностью с вами согласен, писал его не я и поэтому попросил помощи, чтобы из этого убожества сделать конфетку.

((SELECT NULL FROM DUAL)
||'['||
(SELECT COUNT (*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))
||']'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=20319110
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=24439460
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=21178087
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=33232
AND nvl(HOSP_HISTORY_DS,0) = 0 )
||'/'||(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE trunc(PLAN_DATE)=trunc(t1.DDATES) AND PAYMENT_KIND_ID=33233
AND nvl(HOSP_HISTORY_DS,0) = 0 ))
11 июл 18, 13:51    [21562386]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
Ой опять не выделил запрос.
11 июл 18, 13:51    [21562389]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 583
Щукина Анна - извините если чем обидел

Александер234,

Переписать 2-ю часть:
((SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD where trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') 
AND HOSP_PLAN_KIND=75600447 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/
AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))
||' ('||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') 
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=20319110 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 
and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=24439460 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') 
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=21178087 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') 
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=33232 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)
||'/'||
(SELECT COUNT(*) FROM D_V_HPK_PLAN_JOURNALS_ADD WHERE HOSP_PLAN_KIND=75600447 and trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') 
and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') AND PAYMENT_KIND_ID=33232 AND nvl(HOSP_HISTORY_DS,0) = 0 /*AND RECORD_STATUS = 1 AND DEP_ID is not null*/)||')'


на

(SELECT COUNT(1) 
||' ('||COUNT(decode(PAYMENT_KIND_ID,20319110,1))
||'/'|| COUNT(decode(PAYMENT_KIND_ID,24439460,1))
||'/'|| COUNT(decode(PAYMENT_KIND_ID,21178087,1))
||'/'|| COUNT(decode(PAYMENT_KIND_ID,33232,1))
||'/'|| COUNT(decode(PAYMENT_KIND_ID,33232,1))
||')'
FROM D_V_HPK_PLAN_JOURNALS_ADD 
where trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy') 
AND HOSP_PLAN_KIND=75600447 
AND nvl(HOSP_HISTORY_DS,0) = 0 
AND PAYMENT_KIND_ID in (20319110, 24439460, 21178087, 33232, 33233))


Заметить ошибку или странность кода - выделенно красным
11 июл 18, 13:56    [21562422]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 583
Александер234,

Далее подумать про индексы, как отмечалось ранее, и заменить

trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy')


на
plan_date >= to_date('01-07-2018', 'dd-mm-yyyy') and plan_date < to_date('31-07-2018', 'dd-mm-yyyy')+1


Ну и так далее, до "конфетного" вида
11 июл 18, 14:00    [21562441]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
MaximaXXL,
Спасибо , а то тут все умные никто по существу пример привести не мог даже. Теперь знаю в каком направлении мне двигаться.
Показали хоть как избавиться от этих подзапросов долбанных.
11 июл 18, 14:02    [21562456]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
MaximaXXL
Member

Откуда: Киев
Сообщений: 583
Александер234,

Вы пока от них не избавились, и еще 2 - осталось.
Но если подумаете/попробуете - все у Вас получиться.
Кушайте слона по частям - легче переварить.
11 июл 18, 14:05    [21562460]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
MaximaXXL, МИр не без добрых людей ,а то нахватались умных слов и кидаются ими, а по существу помочь никто не может . Еще раз Спасибо.
11 июл 18, 14:07    [21562467]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Stax
Member

Откуда: Ukraine,Lviv
Сообщений: 1271
Александер234,

1)
гляньте что выдает
select * from
table (cast (d_pkg_dat_tools.DATES_IN_RANGE(to_date('01-07-2018', 'dd-mm-yyyy'),to_date('31-07-2018', 'dd-mm-yyyy'),1) as D_CL_DATE)) t1

2) постройте план для одного из кусков и увидете где затык


3) 21562231 в случае наличия подходящего индекса может есть смысл убрать trunc(

.....
stax
11 июл 18, 14:08    [21562473]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
Stax, Выдает список дат . тут все ровно.

К сообщению приложен файл. Размер - 98Kb
12 июл 18, 13:55    [21565982]     Ответить | Цитировать Сообщить модератору
 Re: Как оптимизировать громоздкий запрос sql ?  [new]
Александер234
Member

Откуда:
Сообщений: 38
MaximaXXL, собрал я запрос теперь формируется 14 сек против минуты , но загрузка через web форму стала по легче, но все ровно долговато. Я так понимаю мне теперь в сторону HTML копать надо ?
12 июл 18, 13:58    [21565995]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3   вперед  Ctrl      все
Все форумы / Oracle Ответить