16.08.2007, 17:58 | #1 |
Участник
|
оптимизируем запросы.
если у вас тормоза при нажатии кнопочки запросы в шапках (заказо/закупок..) то предлагаю следующее:
есть такой метод на карте (MAP) - CustVendInvoiceJour.factureJourSortedList_RU X++: DIS : // Header markups while select factureJour join RecId from factureTrans join RecId from markupTrans where factureJour.Module == module && factureJour.CustVendInvoiceAccount == this.InvoiceAccount && factureTrans.FactureId == factureJour.FactureId && factureTrans.Module == module && factureTrans.FactureLineType == FactureLineType_RU::Markup && markupTrans.RecId == factureTrans.MarkupRefRecId && markupTrans.TransTableId == this.TableId && markupTrans.TransRecId == this.RecId { if ( ! ret.find(factureJour)) { ret.ins(factureJour); } } // Line markups while select factureJour join RecId from factureTrans join RecId from markupTrans join RecId from custVendInvoiceTrans where factureJour.Module == module && factureJour.CustVendInvoiceAccount == this.InvoiceAccount && factureTrans.FactureId == factureJour.FactureId && factureTrans.Module == module && factureTrans.FactureLineType == FactureLineType_RU::Markup && markupTrans.RecId == factureTrans.MarkupRefRecId && markupTrans.TransTableId == custVendInvoiceTrans.TableId && custVendInvoiceTrans.RecId == markupTrans.TransRecId && custVendInvoiceTrans.SalesPurchId == this.Num && custVendInvoiceTrans.InvoiceNum == this.InvoiceId && (module == FactureModule_RU::Cust || (module == FactureModule_RU::Vend && custVendInvoiceTrans.PurchInternalInvoiceId == this.PurchInternalInvoiceId)) && custVendInvoiceTrans.InvoiceDate == this.InvoiceDate && custVendInvoiceTrans.NumberSequenceGroupId == this.NumberSequenceGroupId { if ( ! ret.find(factureJour)) { ret.ins(factureJour); } } Пришлось явно сиквелу сказать что делать: для первого запроса наилучшую селективность обеспечивает MARKUPTRANS, для второго карта CUSTINVOICETRANS - имеем: X++: // Header markups // SHiSHok.FRA_Optimize --> factureJour.clear(); while select forceselectorder forcenestedloop forceplaceholders RecId from markupTrans join RecId from factureTrans join * from factureJour index CustVendModuleIdx where markupTrans.TransTableId == this.TableId && markupTrans.TransRecId == this.RecId && factureTrans.FactureLineType == FactureLineType_RU::Markup && factureTrans.MarkupRefRecId == markupTrans.RecId && factureJour.FactureId == factureTrans.FactureId && factureJour.Module == factureTrans.Module && factureJour.Module == module && factureJour.CustVendInvoiceAccount == this.InvoiceAccount { if ( ! ret.find(factureJour)) { ret.ins(factureJour); } } // Line markups while select forceselectorder forcenestedloop forceplaceholders RecId from custVendInvoiceTrans join RecId from markupTrans join RecId from factureTrans join * from factureJour index CustVendModuleIdx where custVendInvoiceTrans.SalesPurchId == this.Num && custVendInvoiceTrans.InvoiceNum == this.InvoiceId && custVendInvoiceTrans.InvoiceDate == this.InvoiceDate && custVendInvoiceTrans.NumberSequenceGroupId == this.NumberSequenceGroupId && (module == FactureModule_RU::Cust || (module == FactureModule_RU::Vend && custVendInvoiceTrans.PurchInternalInvoiceId == this.PurchInternalInvoiceId)) && markupTrans.TransTableId == custVendInvoiceTrans.TableId && markupTrans.TransRecId == custVendInvoiceTrans.RecId && factureTrans.FactureId == factureJour.FactureId && factureTrans.Module == factureJour.Module && factureTrans.FactureLineType == FactureLineType_RU::Markup && factureTrans.MarkupRefRecId == markupTrans.RecId && factureJour.Module == module && factureJour.CustVendInvoiceAccount == this.InvoiceAccount { if ( ! ret.find(factureJour)) { ret.ins(factureJour); } } // SHiSHok.FRA_Optimize <--
__________________
--- SHiSHok Последний раз редактировалось SHiSHok; 16.08.2007 в 18:43. |
|
|
За это сообщение автора поблагодарили: kashperuk (3). |
Теги |
axapta, faq, запрос (query), производительность |
|
|