![]() |
#5 |
Участник
|
Дык, и разберитесь с сиквелом.
Цитата:
Во-вторых, явные хинты требуют постоянного административного внимания. В-третьих, с какой стати у вас сиквел сам этого не понимает? Разберитесь именно с этим. В-четвертых, где-то в блогах, по-моему, Еременко писал, что условия после всех join'ов в Аксапте работает медленнее, чем условия внутри. Про recId и TableId тоже писали. Суть в том, что TableId - аксаптовское поле, не хранимое в базе СКЛе. Это значит, что использование TableId может привести к тому, что таблица исчезнет из SQL-запроса. Т.е. нужно делать примерно так 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. Обратите внимание на проверку на модуль. Лучше сравните с константой, нежели поля таблиц В общем, разберитесь с тем как работает запрос в Аксапте и что происходит в момент выполнения. Перестаньте насиловать Аксапту и СКЛ. Помните: ласку, чистоту и смазку. |
|
Теги |
axapta, faq, запрос (query), производительность |
|
|