Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 помогите с запросом  [new]
ladym
Member

Откуда:
Сообщений: 27
Написала запрос. Выполняется жутко долго и в итоге "...сегмент откат мал..."... :(
Вариантов иного написания не вижу.... Вот, прошу вашей помощи в плане возможности преобразования нижеописанного с сохранением результата... Спасибо.
select sum(doh_proc), sum(doh), sum(doh_fiz), sum(doh_cb), sum(doh_val), sum(rezerv_vos), sum(komis_pol) ...
from (select decode(tt.sumdoh + tt.sumrash,
0,
(select SUM(t1."C_10")
FROM IBS."VW_CRIT_ORB_KONTUR_002" t1
where (t1."C_3" LIKE '701__________11%' AND
tt."C_2" = t1."C_2")) -
decode((select SUM(m."C_6")
FROM IBS."VW_CRIT_ORB_KONTUR_003" m
where ((m."C_8" LIKE '701__________11%' and
m."C_13" NOT LIKE '703%') and
(m."C_4" >=
to_date((to_char(tt."C_2", 'dd/mm/yyyy') ||
' 00:00:00'),
'dd:mm:yyyy hh24:mi:ss') and
m."C_4" <=
to_date((to_char(tt."C_2", 'dd/mm/yyyy') ||
' 23:59:59'),
'dd:mm:yyyy hh24:mi:ss')))),
null,
0),
(select SUM(t1."C_12" - t1."C_6")
FROM IBS."VW_CRIT_ORB_KONTUR_002" t1
where t1."C_3" LIKE '701__________11%'
AND tt."C_2" = t1."C_2")) doh_proc,
-- тут еще куча подобных сеслектов
...
...
...

from (select t.*,
(select SUM(IBS."VW_CRIT_ORB_KONTUR_002"."C_12")
FROM IBS."VW_CRIT_ORB_KONTUR_002"
where (IBS."VW_CRIT_ORB_KONTUR_002"."C_3" LIKE '701%')
AND t."C_2" = IBS."VW_CRIT_ORB_KONTUR_002"."C_2") sumdoh,
(select SUM(IBS."VW_CRIT_ORB_KONTUR_002"."C_12")
FROM IBS."VW_CRIT_ORB_KONTUR_002"
where (IBS."VW_CRIT_ORB_KONTUR_002"."C_3" LIKE '702%')
AND t."C_2" = IBS."VW_CRIT_ORB_KONTUR_002"."C_2") sumrash
from (select distinct tt."C_2"
from IBS."VW_CRIT_ORB_KONTUR_002" tt
where tt."C_2" >= to_date('01/01/2007', 'dd/mm/yyyy')
and tt."C_2" <= to_date('31/03/2007', 'dd/mm/yyyy')
order by tt."C_2") t) tt) ttt
29 июн 07, 08:37    [4329588]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Бабичев Сергей
Member

Откуда:
Сообщений: 2498
Открой для себя такие вещи, как встроенные представления и соединения наборов данных.
29 июн 07, 08:50    [4329625]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
sendal
Guest
Ну, IMHO , Вы изначально пошли по тернистому пути построения запроса...
Некоторый аналог пункт 5 отсюда...
Лучше переписать...
29 июн 07, 08:59    [4329650]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
sendal
Guest
sendal
Ну, IMHO , Вы изначально пошли по тернистому пути построения запроса...
Некоторый аналог пункт 5 отсюда...
Лучше переписать...

Вроде как (не особо вчитываясь), что-то вроде

select sum(doh_proc), sum(doh), sum(doh_fiz), sum(doh_cb), sum(doh_val), sum(rezerv_vos), sum(komis_pol)
from
(select doh_proc, 0 doh, 0 doh_fiz ....
from <>
..........
union all
select 0 doh_proc, doh doh, 0 doh_fiz ....
from <>
..........
union all
........
........
........
)
/

может Вам помочь....
29 июн 07, 09:06    [4329669]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
ну главное, что Вам надо добиваться, понятно - уменьшить кол-во обращений к VW_CRIT_ORB_KONTUR_002 :)

для начала предлагаю сделать в самом низу, что-то такое:

(select distinct tt."C_2"
                          from IBS."VW_CRIT_ORB_KONTUR_002" tt
                         where tt."C_2" >= to_date('01/01/2007', 'dd/mm/yyyy')
                           and tt."C_2" <= to_date('31/03/2007', 'dd/mm/yyyy')
                         order by tt."C_2") t, 

           (select SUM(case when "C_3" LIKE '701%' then "C_12") end,
                   SUM(case when "C_3" LIKE '702%' then "C_12") end,
        ... -- и в таком духе все верхние обращения к этой таблице
                          FROM IBS."VW_CRIT_ORB_KONTUR_002"
                         where (IBS."VW_CRIT_ORB_KONTUR_002"."C_3" LIKE '701%'
                            OR IBS."VW_CRIT_ORB_KONTUR_002"."C_3" LIKE '702%') t2
where t."C_2" = t2."C_2"



ladym
Написала запрос. Выполняется жутко долго и в итоге "...сегмент откат мал..."... :(
Ну этот итог не совсем со временем выполнения связан :)

PS: используйте тег SRC
29 июн 07, 10:08    [4330014]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
Пардон, естественно, если надо, то outer соединение :) И group by. На самом деле я просто путь показываю, схематично :)
Jannny
(select distinct tt."C_2"
                          from IBS."VW_CRIT_ORB_KONTUR_002" tt
                         where tt."C_2" >= to_date('01/01/2007', 'dd/mm/yyyy')
                           and tt."C_2" <= to_date('31/03/2007', 'dd/mm/yyyy')
                         order by tt."C_2") t, 

           (select  c2,
                   SUM(case when "C_3" LIKE '701%' then "C_12") end,
                   SUM(case when "C_3" LIKE '702%' then "C_12") end,
        ... -- и в таком духе все верхние обращения к этой таблице
                          FROM IBS."VW_CRIT_ORB_KONTUR_002"
                         where (IBS."VW_CRIT_ORB_KONTUR_002"."C_3" LIKE '701%'
                            OR IBS."VW_CRIT_ORB_KONTUR_002"."C_3" LIKE '702%')
                      group by c2) t2
where t."C_2" = t2."C_2"(+)
29 июн 07, 10:14    [4330058]     Ответить | Цитировать Сообщить модератору
 Re: помогите с запросом  [new]
sendal
Guest
Jannny
ну главное, что Вам надо добиваться, понятно - уменьшить кол-во обращений к VW_CRIT_ORB_KONTUR_002 :)
.........

Что-то (наверное название объекта) наводит меня на размышления, что
VW_CRIT_ORB_KONTUR_002 - не таблица и копать надо немного
глубже...
Jannny

.......
ladym
Написала запрос. Выполняется жутко долго и в итоге "...сегмент откат мал..."... :(
Ну этот итог не совсем со временем выполнения связан :)
.....

Ну лечить ЛУЧШЕ качественным изменением времени запроса в лучшую сторону......
29 июн 07, 11:10    [4330482]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить