powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как оптимизировать громоздкий запрос sql ?
25 сообщений из 73, страница 1 из 3
Как оптимизировать громоздкий запрос sql ?
    #39672505
автор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 минут
Вопрос, как убрать подзапросы или как мне его правильно оптимизировать ?
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672510
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александер234,

почитать про PIVOT или реализацию на CASE/DECODE в версиях, его не поддерживающих...
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672513
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александер234,

CASE/DECODE-ный вариант
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672515
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александер234
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
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 минут
Вопрос, как убрать подзапросы или как мне его правильно оптимизировать ?

Хотя, всё равно - нечитабельно...
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672520
Щукина Анна,читал я про 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) )
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672530
Щукина Анна,

не понял тут ??
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672531
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александер234 Как быть не знаюПредоставить удобняе для использования тестовые данные, желаемый результат на них и словесное описание сути "хотелки"....
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672532
Щукина Анна, Щас попытаюсь объяснить как могу
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672536
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александер234Щукина Анна,

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

что из этого у вас вызвало непонимание
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672537
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
прощай, индекс
Код: plsql
1.
 and trunc(PLAN_DATE)=trunc(t1.DDATES)
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672539
Щукина Анна, 2) пункт был не понятен ,теперь пояснили спс.
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672542
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andreymxпрощай, индекс
Код: plsql
1.
 and trunc(PLAN_DATE)=trunc(t1.DDATES)

и так - 10 раз подряд :)
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672545
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна,

Начинайте по кусочкам
1. Вот это вложенное убожество
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
((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 ))



превратите вот в такое например:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
(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))
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672549
Фотография Щукина Анна
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MaximaXXL,

будьте, пожалуйста, внимательнее, когда отвечаете адресно. Я - не ТС, мне можно не отвечать ;)
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672557
Друзья спокойствие только спокойствие
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672560
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 ))
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672561
Ой опять не выделил запрос.
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672567
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Щукина Анна - извините если чем обидел

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

Переписать 2-ю часть:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
((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*/)||')'



на

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
(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))



Заметить ошибку или странность кода - выделенно красным
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672572
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александер234,

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

Код: plsql
1.
trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy')



на
Код: plsql
1.
plan_date >= to_date('01-07-2018', 'dd-mm-yyyy') and plan_date < to_date('31-07-2018', 'dd-mm-yyyy')+1



Ну и так далее, до "конфетного" вида
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672575
MaximaXXL,
Спасибо , а то тут все умные никто по существу пример привести не мог даже. Теперь знаю в каком направлении мне двигаться.
Показали хоть как избавиться от этих подзапросов долбанных.
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672579
MaximaXXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александер234,

Вы пока от них не избавились, и еще 2 - осталось.
Но если подумаете/попробуете - все у Вас получиться.
Кушайте слона по частям - легче переварить.
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672580
MaximaXXL, МИр не без добрых людей ,а то нахватались умных слов и кидаются ими, а по существу помочь никто не может . Еще раз Спасибо.
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39672582
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Александер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
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39673137
Stax, Выдает список дат . тут все ровно.
...
Рейтинг: 0 / 0
Как оптимизировать громоздкий запрос sql ?
    #39673142
MaximaXXL, собрал я запрос теперь формируется 14 сек против минуты , но загрузка через web форму стала по легче, но все ровно долговато. Я так понимаю мне теперь в сторону HTML копать надо ?
...
Рейтинг: 0 / 0
25 сообщений из 73, страница 1 из 3
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как оптимизировать громоздкий запрос sql ?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]