Показать сообщение отдельно
Старый 07.09.2009, 09:05   #12  
ViV is offline
ViV
Axapta Retail User
Самостоятельные клиенты AX
Axapta Retail User
 
200 / 79 (3) ++++
Регистрация: 14.09.2005
Цитата:
Сообщение от 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" лишнее?