AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 24.11.2005, 23:40   #5  
mazzy is offline
mazzy
Участник
Аватар для mazzy
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
29,472 / 4494 (208) ++++++++++
Регистрация: 29.11.2001
Адрес: Москва
Записей в блоге: 10
Цитата:
Сообщение от axaLearner
Возник вопрос: что производительнее
while select purchLine
{
inventTable = InventTable::find(PurchLine.itemId);
some action;
}
или
while select purchLine
join inventTable
where purchLine.ItemId == inventTable.ItemId
{
some action
}

?
В общем случае второй вариант.

Но зачастую - первый. Тут правильно говорили о кэшировании.

Но не только кэширование. Вы привели только один дополнительный поиск - номенклатуру. По строке закупке можно многое чего искать дополнительно. И название склада, и параметры парти, прочие складские аналитики и финансовые, дополнительные параметры для лота возврата, искать складские проводки с лотом и т.п.

Т.е. правильно вопрос выглядит так:
что лучше
X++:
while select purchLine
{
    inventTable = InventTable::find(PurchLine.itemId);
    some action;
    if( some1 ) someTable1::find(PurchLine.someId1);
    if( some2 ) someTable2::find(PurchLine.someId2);
    if( some3 ) someTable3::find(PurchLine.someId3);
    ...
}
или
X++:
while select purchLine 
                   join inventTable
                   where purchLine.ItemId == inventTable.ItemId
                   join someTable1
                   where purchLine.someId1 == someTable1.someId
                   join someTable2
                   where purchLine.someId2 == someTable2.someId
                   join someTable3
                   where purchLine.someId3 == someTable3.someId
                   ...
{
    some action
}
А здесь ответ уже далеко не однозначен.

По идее надо бы еще говорить о плане запроса и о кэшировании запросов на СКЛ... О том, насколько лучше СКЛ оптимизирует простые запросы (даже если их много) по сравнению со сложными (но редкими).

Кроме этих соображений есть еще одно - только первый вариант позволит сделать универсальный и развесистый код. Только первый вариант позволит скрыть детали реализации.

Вы пишете свой метод для работы с номенклатурой внутри цикла по строкам закупки. Ваш метод получает в качестве параметра код номенклатуры. Как эту номенклатуру получили вас в вашем методе не волнует. Ваш метод занимается только своей работой. В таком случае бывает удобнее внутри вашего метода сделать лишний find.
__________________
полезное на axForum, github, vk, coub.
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Проблемы с Exists Join Logger DAX: Программирование 28 28.04.2010 02:54
daxmy: AOT Find function Blog bot DAX Blogs 0 17.08.2007 01:23
Глюки в Query с разными типами Join (в т.ч. NonExistsJoin) к одной таблице gl00mie DAX: Программирование 10 14.02.2007 13:22
Dynamics AX Geek: cross-references & find Blog bot DAX Blogs 0 28.10.2006 16:40

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 05:00.