Показать сообщение отдельно
Старый 10.01.2008, 14:58   #8  
Alexius is offline
Alexius
Участник
Аватар для Alexius
 
461 / 248 (9) ++++++
Регистрация: 13.12.2001
;)
Цитата:
Сообщение от oleg_e Посмотреть сообщение
Будем считать, что индексы расставлены.
А можно полюбопытствовать, какие ?

1. Рекомендую избавится от использования в условии запроса переменной includeEstimated, использовав несколько специализированных запросов и при необходимости подпроцедуру для тела цикла
2. Вместо конструкций вида
Цитата:
Сообщение от oleg_e Посмотреть сообщение
((inventTrans.StatusReceipt == StatusReceipt::None && inventTrans.StatusIssue == StatusIssue::Sold) ||
(inventTrans.StatusReceipt == StatusReceipt::Purchased && inventTrans.StatusIssue == StatusIssue::None))
в Аксапте лучше использовать

(inventTrans.StatusReceipt == StatusReceipt::None || inventTrans.StatusReceipt == StatusReceipt::Purchased) &&
(inventTrans.StatusIssue == StatusIssue::None || inventTrans.StatusIssue == StatusIssue::Sold)

3. Даты тоже можно немного оптимизировать, меняем
Цитата:
Сообщение от oleg_e Посмотреть сообщение
(inventTrans.DateFinancial
&& inventTrans.DateFinancial >= dateFrom && inventTrans.DateFinancial <= dateTo) ||
(!inventTrans.DateFinancial
&& inventTrans.DateExpected >= dateFrom && inventTrans.DateExpected <= dateTo))
на

inventTrans.DateFinancial >= dateFrom
&& (inventTrans.DateFinancial && inventTrans.DateFinancial <= dateTo ||
(!inventTrans.DateFinancial
&& inventTrans.DateExpected >= dateFrom && inventTrans.DateExpected <= dateTo))

PS. А лучше всего поймать этот запрос в MS SQL Profiler и посмотреть его план выполнения