Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 НЕПОТЕМЕ  [new]
НЕПОТЕМЕ
Guest
Ну так кто-нибудь знает,что делать
или все!!!
Тут некоторые предлагали изменить запрос
высылаю полный формат
select
s.invoice_id,
c.Company_name,
os.company_id,
o.Give_Date,
d.ProdName,
os.quantity-s.T,
(os.quantity-s.T)*os.cost,
os.quantity,
os.quantity*os.cost,
p.T,
p.T*os.cost,
(os.quantity-s.T)-p.T,
((os.quantity-s.T)-p.T)*os.cost
from outlay_specification os,company c,product d,outlay_invoice o,
(select outlay_id,T=sum(amount) from coupons
where coupon_datesale between '01.10.02'and'31.10.02'
group by outlay_id
union
select outlay_id, T=sum(amount) from archCoupons.dbo.coupons
where coupon_datesale between '01.10.02'and'31.10.02'
group by outlay_id) p,
(select outlay_id,T=sum(amount) from coupons
where coupon_datesale <'01.10.02'
group by outlay_id
union
select outlay_id, T=sum(amount) from archCoupons.dbo.coupons
where coupon_datesale <'01.10.02'
group by outlay_id) s
where p.outlay_id=os.outlay_id
and s.outlay_id=os.outlay_id
and os.invoice_id=o.invoice_id
and os.product_id=d.product_id
and os.company_id=c.company_id
and os.company_id<>0
union
select
s.invoice_id,
c.Company_name,
os.company_id,
o.Give_Date,
d.ProdName,
os.quantity,
(os.quantity)*os.cost,
os.quantity,
os.quantity*os.cost,
p.T,
p.T*os.cost,
os.quantity-p.T,
(os.quantity-p.T)*os.cost
from outlay_specification os,company c,product d,outlay_invoice o,
(select outlay_id,T=sum(amount) from coupons
where coupon_datesale between '01.10.02'and'31.10.02'
group by outlay_id
union
select outlay_id, T=sum(amount) from archCoupons.dbo.coupons
where coupon_datesale between '01.10.02'and'31.10.02'
group by outlay_id)p
where p.outlay_id not in(select outlay_id from coupons where coupon_datesale <'01.10.02'group by outlay_id)
and p.outlay_id not in
(select outlay_id from archCoupons.dbo.coupons where coupon_datesale <'01.10.02' group by outlay_id)
and os.outlay_id=p.outlay_id
and os.company_id<>0
and os.invoice_id=o.invoice_id
and os.product_id=d.product_id
and os.company_id=c.company_id
union
select
s.invoice_id,
c.Company_name,
os.company_id,
o.Give_Date,
d.ProdName,
os.quantity,
(os.quantity)*os.cost,
os.quantity,
os.quantity*os.cost,
0,
0,
os.quantity,
os.quantity*os.cost
from outlay_specification os,company c,product d,outlay_invoice o
where os.invoice_id=o.invoice_id
and os.outlay_id not in(select outlay_id from coupons where coupon_datesale between '01.10.02'and'31.10.02'group by outlay_id)
and os.outlay_id not in
(select outlay_id from archCoupons.dbo.coupons where coupon_datesale between '01.10.02'and'31.10.02' group by outlay_id)
and os.product_id=d.product_id
and os.company_id=c.company_id
and os.company_id<>0
and os.AsCoupon=1
and o.give_date between '01.10.02'and'31.10.02'
22 дек 03, 06:09    [468736]     Ответить | Цитировать Сообщить модератору
 Re: НЕПОТЕМЕ  [new]
НЕПОТЕМЕ
Guest
Здесь идет речь
об времени исполнения запроса
в Дельфи
Некоторые прелагали
SET_LOCKTIMEOUT 60000
но у меня MSSQL-6.5
а ошибка Lock time out уже достала
подскажите че делать
22 дек 03, 06:42    [468741]     Ответить | Цитировать Сообщить модератору
 Re: НЕПОТЕМЕ  [new]
Trong
Member

Откуда: Novosibirsk
Сообщений: 759
Разбить этот запрос на несколько используя временные таблицы
22 дек 03, 08:57    [468788]     Ответить | Цитировать Сообщить модератору
 Re: НЕПОТЕМЕ  [new]
Vlodzy
Member

Откуда:
Сообщений: 21
Ну, во-первых все ниже сказанное считать IMHO!

А, во-вторых, лучшего способа затормозить систему, чем создавать в запросе с клиента через ODBC временные таблицы я таки не знаю.

В-третьих, лучше разбить запрос на "атомарные", которые чаще всего используются и представить их как view. Для облегчения чтения вашего запроса другими людьми рекомендую все-таки использовать в фразе FROM слова JOIN, вместо наведения связей в фразе WHERE. Машине-то конечно все равно, а вот читабельность улучшится. Ломать голову над запросом в том виде, в котором он заpost'ен, весьма сложно. Попробуйте посмотреть на свой запрос с помощью каких небудь визуальных средств (хоть Access 2k).

В-четвертых, создайте сохраненную процедуру и получайте рекордсет от нее.
И последнее, если у вас права разработчика для данной проблемы - создайте индексы по полям которые входят в фразы WHERE и GROUP BY (то есть связки и группировки). В особо тяжелых случаях можно сделать постоянную суммарную таблицу (особенно если отчеты по БД составляются чаще чем обновляются данные).
23 дек 03, 12:06    [470541]     Ответить | Цитировать Сообщить модератору
 Re: НЕПОТЕМЕ  [new]
НЕПОТЕМЕ
Guest
Так скажем на ответ Vlodzy
Во всей этой кутерме запроса
больше всего времени занимает
запрос (select outlay_id from archCoupons.dbo.coupons where coupon_datesale <'01.10.02' group by outlay_id)
примерно 4 минуты
куда его модифицировать я незнаю
а, что такое сумарная таблица я незнаю
Запрос этот долго выполняется потому, что в таблице archCoupons.dbo.coupons 4000000 записей
что куда модифицировать
я незнаю
24 дек 03, 10:25    [471806]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить