Цитата:
Сообщение от
mazzy
Т.е. нужно делать примерно так
X++:
// Header markups
// SHiSHok.FRA_Optimize -->
factureJour.clear();
while select RecId from markupTrans
where markupTrans.TransRecId == this.RecId
&& markupTrans.TransTableId == this.TableId
join RecId from factureTrans
where factureTrans.MarkupRefRecId == markupTrans.RecId
&& factureTrans.Module == module
&& factureTrans.FactureLineType == FactureLineType_RU::Markup
join * from factureJour index CustVendModuleIdx
where factureJour.FactureId == factureTrans.FactureId
&& factureJour.Module == module
&& factureJour.CustVendInvoiceAccount == this.InvoiceAccount
Обратите внимание на порядок полей в условиях.
1. Порядок полей должен по возможности совпадать с порядком полей в индексе (в противном случае SQL должен выполнить доп-работу)
2. Если у вас задействуется несколько индексов, то сначала укажите самый селективный (см. factureTrans)
3. Обратите внимание на проверку на модуль. Лучше сравните с константой, нежели поля таблиц.
Вопрос про блок
X++:
where factureJour.FactureId == factureTrans.FactureId
&& factureJour.Module == module
&& factureJour.CustVendInvoiceAccount == this.InvoiceAccount
На таблице FactureJour_RU индекс FactureIdx (FactureId и Module) уникальный.
Следует ли отсюда, что условие "&& factureJour.CustVendInvoiceAccount == this.InvoiceAccount" лишнее?