AXForum  
Zurück   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Kennwort vergessen?
Registrieren Forum Rules Hilfe Benutzerliste Heutige Beiträge Suchen

 
 
Themen-Optionen Thema durchsuchen Ansicht
Alt 07.12.2007, 14:17   #1  
Logger ist offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3.995 / 3293 (117) ++++++++++
Registriert seit: 12.10.2004
Ort: Москва
Blog-Einträge: 2
Проблемы с 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);
        }
    }
из-за Exists Join оракл сперва пытается фильтровать и сортировать 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
Stichworte
ax3.0, exists, oracle, sql server

 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Порядок выполнения GroupBy и Exists Join для временных таблиц S.Kuskov DAX: Программирование 6 06.12.2012 16:55
Не отрабатывает запрос EXISTS JOIN Paul_ST DAX: База знаний и проекты 8 21.03.2008 17:21
Проблема с Exists Join Morpheus DAX: Программирование 5 14.08.2006 18:22
Как добавить к запросу еще один источник по EXISTS JOIN Lucky13 DAX: Программирование 6 29.11.2005 15:05

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Gehe zu

Рейтинг@Mail.ru
Alle Zeitangaben in WEZ +3. Es ist jetzt 06:21 Uhr.
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.