Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - Как оптимизировать громоздкий запрос sql ?

Ответить
Настройки темы
Прочие БД - Как оптимизировать громоздкий запрос sql ?

Аватара для АлександЕР21

Пользователь


Сообщения: 63
Благодарности: 0

Профиль | Отправить PM | Цитировать


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 минут
Вопрос, как убрать подзапросы или как мне его правильно оптимизировать ?

Отправлено: 09:14, 11-07-2018

 
y-- y-- вне форума

Старожил


Сообщения: 231
Благодарности: 62

Профиль | Отправить PM | Цитировать


АлександЕР21,
Правильно будет пожалуй переписать с нуля.
А оптимизировать можно разными способами... Ну например:
Код: Выделить весь код
trunc(plan_date) >= to_date('01-07-2018', 'dd-mm-yyyy') and trunc(plan_date) <= to_date('31-07-2018', 'dd-mm-yyyy')
по результату эквивалентно
Код: Выделить весь код
trunc(plan_date, 'MONTH') = to_date('01-07-2018', 'dd-mm-yyyy')
а время выполнения будет заметно отличаться...

-------
Ты это - заходи если что...


Отправлено: 11:05, 11-07-2018 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для АлександЕР21

Пользователь


Сообщения: 63
Благодарности: 0

Профиль | Отправить PM | Цитировать


y--,
Цитата y--:
Правильно будет пожалуй переписать с нуля. »
Готов переписать с нуля только вот не знаю с чего начать ,дайте направление пжлст. ЧТо нужно использовать UNION ALL ? Каким образом мне написать правильный и грамотный запрос ?

Отправлено: 11:24, 11-07-2018 | #3

y-- y-- вне форума

Старожил


Сообщения: 231
Благодарности: 62

Профиль | Отправить PM | Цитировать


АлександЕР21,
Использование UNION ALL на относительно небольшой по общему объему итоговой выборке вполне оправдано. Главное следить чтобы все объединяемые выборки совпадали по структуре.
Цитата АлександЕР21:
Каким образом мне написать правильный и грамотный запрос ? »
Начинают всегда от печки - постановка задачи наше все!
И по-ходу надо бы замеры производительности подвложенных кусков существующего решения оценить - чтобы понять где торможение.

-------
Ты это - заходи если что...

Это сообщение посчитали полезным следующие участники:

Отправлено: 12:15, 11-07-2018 | #4



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » Прочие БД - Как оптимизировать громоздкий запрос sql ?

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Прочие БД - Как можно написать такой запрос в T-SQL r-studio Программирование и базы данных 0 19-10-2014 15:15
Разное - запрос SQL virus8 Программирование и базы данных 3 15-05-2013 16:35
MySQL - Реально ли оптимизировать запрос? volter Программирование и базы данных 1 30-03-2009 02:58
sql запрос E-mail Вебмастеру 20 30-12-2006 22:31
SQL запрос pauluss Вебмастеру 5 11-06-2004 09:14




 
Переход