Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как оптимизировать громоздкий запрос sql ? / 25 сообщений из 73, страница 1 из 3
11.07.2018, 13:10
    #39672505
Как оптимизировать громоздкий запрос sql ?
автор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
11.07.2018, 13:15
    #39672510
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимизировать громоздкий запрос sql ?
Александер234,

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

CASE/DECODE-ный вариант
...
Рейтинг: 0 / 0
11.07.2018, 13:17
    #39672515
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимизировать громоздкий запрос sql ?
Александер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
11.07.2018, 13:20
    #39672520
Как оптимизировать громоздкий запрос sql ?
Щукина Анна,читал я про 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
11.07.2018, 13:24
    #39672530
Как оптимизировать громоздкий запрос sql ?
Щукина Анна,

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

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

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

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

Начинайте по кусочкам
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
11.07.2018, 13:39
    #39672549
Щукина Анна
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимизировать громоздкий запрос sql ?
MaximaXXL,

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

Александер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
11.07.2018, 14:00
    #39672572
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимизировать громоздкий запрос sql ?
Александер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
11.07.2018, 14:02
    #39672575
Как оптимизировать громоздкий запрос sql ?
MaximaXXL,
Спасибо , а то тут все умные никто по существу пример привести не мог даже. Теперь знаю в каком направлении мне двигаться.
Показали хоть как избавиться от этих подзапросов долбанных.
...
Рейтинг: 0 / 0
11.07.2018, 14:05
    #39672579
MaximaXXL
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как оптимизировать громоздкий запрос sql ?
Александер234,

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


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