07.12.2007, 14:17 | #1 |
Участник
|
Проблемы с Exists Join
Коллеги поделитесь опытом.
Столкнулся с такой проблемой. Есть метод \Data Dictionary\Tables\FactureJour_RU\Methods\invoiceJourSortedList_CustVend в нем исполняется запрос X++: while select custVendInvoiceJour exists join factureTrans where custVendInvoiceJour.InvoiceAccount == this.CustVendInvoiceAccount && factureTrans.Module == this.Module && factureTrans.FactureId == this.FactureId && (factureTrans.FactureLineType == FactureLineType_RU::InvoiceLine || factureTrans.FactureLineType == FactureLineType_RU::InvoiceEndDisc || factureTrans.FactureLineType == FactureLineType_RU::InvoiceRoundOff) && factureTrans.InvoiceDate == custVendInvoiceJour.InvoiceDate && factureTrans.InvoiceId == custVendInvoiceJour.InvoiceId && factureTrans.SalesPurchId == custVendInvoiceJour.Num && factureTrans.NumberSequenceGroup == custVendInvoiceJour.NumberSequenceGroupId && (this.Module == FactureModule_RU::Cust || (this.Module == FactureModule_RU::Vend && factureTrans.InternalInvoiceId == custVendInvoiceJour.PurchInternalInvoiceId)) { if (! ret.find(custVendInvoiceJour)) { ret.ins(custVendInvoiceJour); } } Подобные же проблемы есть в методах \Data Dictionary\Tables\FactureJour_RU\Methods\invoiceJourSortedList_TaxCorrection \Data Dictionary\Maps\CustVendInvoiceJour\Methods\factureJourSortedList_RU Как вы решали эти проблемы ? Есть ли возможность заставить оракл (не изменяя запрос в Аксапте) сначала отфильтровать подзапрос, который сидит в Exists Join , а потом уже обрабатывать custVendInvoiceJour ? В MS SQL такие проблемы встрачались ? Я пока придумал только такой способ : изменить Exist Join factureTrans на Inner join TableId from factureTrans в таком случае обе таблицы становятся равноправными в запросе. БД сперва обрабатывает FactureTrans - сужает выборку FactureTrans до числа строчек из одной фактуры и для такой маленькой выборки уже получает и сортирует шапки custVendInvoiceJour. Производительность резко выросла. Нагрузка на БД упала многократно. Незначительно выросла нагрузка на АОС из-за того что в результате выборки получается не одна запись, а столько сколько было строчек в фактуре и они все перебираются в цикле. Но это мелочь. P.S. Ax 3.0 SP3 |
|