|
![]() |
#1 |
Участник
|
Цитата:
Вот метод полностью: X++: protected Map initRasset01Map() { Map _ret = new Map(Types::String, Types::Date); Set _account01Set = this.initAccount01Set(); RAssetTable _rassetTable; RAssetTrans _rassetTrans; LedgerTrans _ledgerTrans; int i, ip4, ip2, ip3; while select _rassetTable index RAssetNumIdx where _rassetTable.VGP_PropertyTax == NoYes::Yes join firstonly _rassetTrans index TransTypeIdx where _rassetTrans.AccountNum == _rassetTable.AccountNum && _rassetTrans.AssetTransType == RAssetTransType::Acquisition && _rassetTrans.TransDate <= reportDateEnd join firstonly _ledgerTrans index VGP_LedgerLinkIdx where _ledgerTrans.VGP_LedgerLinkId == _rassetTrans.VGP_LedgerLinkId && _ledgerTrans.VGP_LedgerLinkModuleRef == VGP_LedgerLinkModuleRef::RAsset && //ОС _ledgerTrans.Voucher == _rassetTrans.Voucher && _ledgerTrans.TransDate == _rassetTrans.TransDate { i++; if (_account01Set.in(_ledgerTrans.AccountNum)) { _ret.insert(_rassetTable.AccountNum, this.getDisposalDate(_rassetTable.AccountNum)); } } // box::info( int2str(i) ); return _ret; } Переписал на прямой запрос в той же функции, выполняется вместо 26 минут - 30 секунд. Посмотрел генерируемые запросы, вроде одинаковые вот такого вида: SELECT A.TRANSDATE,A.RECID,A.VGP_LEDGERLINKID FROM RASSETTRANS A(INDEX(I_16077RASSETDATEIDX)) WHERE ((DATAAREAID=?) AND (((ACCOUNTNUM=?) AND (TRANSDATE<?)) AND ((((ASSETTRANSTYPE=?) OR (ASSETTRANSTYPE=?)) OR (ASSETTRANSTYPE=?)) OR (ASSETTRANSTYPE=?)))) OPTION(FAST 2) внутри проскакивают 2-3 другого вида но непонятно к чему они относятся. Цитата:
![]() ![]() ![]()
__________________
PS. Сложно приехать в Москву, но ещё сложнее уехать отсюда. |
|
![]() |
#2 |
Участник
|
Цитата:
Сообщение от 3oppo
![]() Вот метод полностью:
... Посмотрел генерируемые запросы, вроде одинаковые вот такого вида: SELECT A.TRANSDATE,A.RECID,A.VGP_LEDGERLINKID FROM RASSETTRANS A(INDEX(I_16077RASSETDATEIDX)) WHERE ((DATAAREAID=?) AND (((ACCOUNTNUM=?) AND (TRANSDATE<?)) AND ((((ASSETTRANSTYPE=?) OR (ASSETTRANSTYPE=?)) OR (ASSETTRANSTYPE=?)) OR (ASSETTRANSTYPE=?)))) OPTION(FAST 2) внутри проскакивают 2-3 другого вида но непонятно к чему они относятся. Здесь идет связка по OR для нескольких условий для ASSETTRANSTYPE, а в коде x++ - по одному. Попробуйте оставить только выборку и цикл по ней и посмотрите на результат запроса.
__________________
Axapta v.3.0 sp5 kr2 |
|
Теги |
производительность, запрос (query), ax3.0 |
|
|