День добрый! Не подскажут ли знатоки, есть ли альтернатива по тяжелым запросам использующие exists join? Есть следующий запрос (см.ниже), использующий тяжелые таблицы (inventtrans>4 млн строк, inventdim>300 тыс, табл. А и B >500 тыс). Сейчас время отчета с использованием этого запроса более 40 мин (при выбранном периоде 1 мес)
Можно ли модифицироать запрос? Будем считать, что индексы расставлены.
Использование forcenestedloop forceselectorder ненамного сократило время.
Прошу прощения, на неформатированность запроса
while select inventTrans
where ((inventTrans.TransType == InventTransType::Purch) || (inventTrans.TransType == InventTransType::Sales))
&& (includeEstimated || ( ! includeEstimated &&
((inventTrans.StatusReceipt == StatusReceipt::None && inventTrans.StatusIssue == StatusIssue::Sold) ||
(inventTrans.StatusReceipt == StatusReceipt::Purchased && inventTrans.StatusIssue == StatusIssue::None))))
&& (inventTrans.DateFinancial
&& inventTrans.DateFinancial >= dateFrom && inventTrans.DateFinancial <= dateTo) ||
(!inventTrans.DateFinancial
&& inventTrans.DateExpected >= dateFrom && inventTrans.DateExpected <= dateTo))
join [fields] from inventTable
where inventTable.ItemId == inventTrans.ItemId &&
inventTable.ItemType != .....
join [fields] from inventDim
where inventDim.InventDimId == inventTrans.InventDimId
&& (.........)
exists join [fields] from A
where A.[X] == inventDim.[Y]
join B
where B.InventDimId == A.InventDimId
&& ((B.DateFinancial && B.DateFinancial >= dateFrom
&& B.DateFinancial <= dateTo) ||
( !B.DateFinancial && B.DateExpected >= dateFrom && B.DateExpected <= dateTo))