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

Откуда:
Сообщений: 34
Господа!
MS SQL Server 2000
Ниже приведён запрос, который выполняется 0.4 сек и выдаёт 6 записей
Если убрать коммент с функции MAX, то время выполнения возрастает до 4-5 сек
Вопос - почему? и что сделать, чтобы выполнялся быстро?


select
-- max(
case when (sumdoc-isnull(sumopl,0))>0 then datediff(d,dateopl,getdate()) else 0 end
-- )
prosr

from (
select ra.IDDOC,ra.SP170 clnt, ra.SP171 sumdoc,
Isnull(isnull((select sp1822 from Work75.dbo.dh1865 where iddoc=ra.iddoc),
(select sp909 from Work75.dbo.dh410 where iddoc=ra.iddoc)),
(select sp1667 from Work75.dbo.dh469 where iddoc=ra.iddoc)) dateopl
from Work75.dbo.ra169 ra,
(select iddoc from work75.dbo._1Sjourn with (nolock)
where iddocdef in (1865, 410, 469)
and date_time_iddoc>cast(year(DATEADD(d,-200,getdate())) as char(4))+
right('0'+rtrim(cast(month(dateadd(d,-200,getdate())) as char(2))),2)+
right('0'+rtrim(cast(day(dateadd(d,-200,getdate())) as char(2))),2)
and ismark=0 and closed=1) r1
where ra.iddoc=r1.iddoc
and ra.SP170=' 3CZ '
) docm
left outer join
(
select right(ra.sp405,9) iddoc1, sum(ra.sp171) sumopl
from Work75.dbo.ra169 ra
where iddoc in
(select iddoc from work75.dbo._1Sjourn with (nolock)
where iddocdef in (336, 2615, 2525, 259)
and date_time_iddoc>cast(year(DATEADD(d,-200,getdate())) as char(4))+
right('0'+rtrim(cast(month(dateadd(d,-200,getdate())) as char(2))),2)+
right('0'+rtrim(cast(day(dateadd(d,-200,getdate())) as char(2))),2)
and ismark=0 and closed=1)
and ra.SP170=' 3CZ '
group by right(ra.sp405,9)
) opl
on docm.iddoc=opl.iddoc1
where
isnull(sumopl,0)<>docm.sumdoc
and dateopl<getdate()
13 янв 10, 12:09    [8176262]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Почему медленно и что сделать, чтобы ускорить?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36828
KBAHT
Если убрать коммент с функции MAX, то время выполнения возрастает до 4-5 сек
И ворзвращает 3 миллиона записей?
KBAHT
Вопос - почему?
Потому что это разные запросы, возвращающие разный результат. И нет ничего странного, что они работают разное время.

Сообщение было отредактировано: 13 янв 10, 12:12
13 янв 10, 12:12    [8176285]     Ответить | Цитировать Сообщить модератору
 Re: Запрос. Почему медленно и что сделать, чтобы ускорить?  [new]
KBAHT
Member

Откуда:
Сообщений: 34
...И ворзвращает 3 миллиона записей?..

Ну, не 3 миллиона, а только 1, т.к. юзается мах.
13 янв 10, 12:20    [8176348]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить