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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 31.07.2007, 15:00   #1  
Blog bot is offline
Blog bot
Участник
 
25,631 / 848 (80) +++++++
Регистрация: 28.10.2006
axcoder: Unwanted fields fetching when selecting by unique index
Источник: http://axcoder.blogspot.com/2007/07/...selecting.html
==============

Last friday i was optimizing a form with a lof of display fields with an implementation like the following:

X++:
display EmplName emplName()
{
  return EmplTable::find(this.EmplID).Name;
}
The one of sources to increase performance of such code is to select only fields which will be used lately. So I have replaced this code with the following:

X++:
display EmplName emplName()
{
  return this.EmplID ?
         (select Name from EmplTable
              where EmplTable.emplID==this.EmplID).Name
         :
         "";
}
but when I enabled SQL tracing, I found, that this code producess select with ALL fields of EmplTable.
It was strange... With a great help of my co worker, i've found the following:
  • when there is only fields of any unique index in the where condition, all fields are fetched
  • when there is an extra field in the condition, only required fields is selected (and the extra fields in where)
  • So I converted previously mentioned methods to the following:

X++:
display EmplName emplName()
{
  return this.EmplID ?
         (select Name from EmplTable
              where EmplTable.emplID==this.EmplID
                     &&
                     EmplTable.recID
          ).Name
         :
         "";
}

Источник: http://axcoder.blogspot.com/2007/07/...selecting.html
__________________
Расскажите о новых и интересных блогах по Microsoft Dynamics, напишите личное сообщение администратору.
Старый 31.07.2007, 18:09   #2  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Возможно выборка всех полей (а не только того поля, которое явно указано в запросе) происходит из-за того, что система пытается закэшировать получаемую запись (кэширование как раз и срабатывает когда выборка проиводится именно по уникальному индексу). Интересно, что будет если попробовать тот же запрос, но с выключенным кэширование для таблицы EmplTable?
Старый 31.07.2007, 18:18   #3  
petr is offline
petr
Участник
Соотечественники
 
561 / 201 (8) ++++++
Регистрация: 30.05.2005
Адрес: Швейцария
Inside Microsoft Dynamics AX 4.0. (Microsoft Press). Страница 446.
X++:
static void expandingFieldList(Args _args)
{
    CustTable   custTable;
    ;

    select CreditRating // This field will be expanded to all fields.
        from custTable
        where custTable.AccountNum == "SeverStahl";
}
Кроме того, если запись уже находится в кэше, при добавлении условия recId!=0 аксапта вместо того, чтобы взять запись из кэша, сгенерит запрос на SQL-сервер. Так что неоднозначно, что предложенный подход лучше стандартного.

Последний раз редактировалось petr; 31.07.2007 в 18:22. Причина: Немного добавил
За это сообщение автора поблагодарили: glibs (4).
Старый 31.07.2007, 19:42   #4  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
я проверял то же самое с CacheLookup = None
Старый 31.07.2007, 19:51   #5  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Сейчас пытаюсь подобрать другую таблицу с CacheLookup == None и с уникальным индексом, и не получается (в стандартном функционале).
Старый 31.07.2007, 19:56   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
Предлагаю писать далее сюда:
Выборка лишних полей ( kr2 ) - DAX: Программирование - AXForum
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
palleagermark: Saving the reference to a unique record as a string Blog bot DAX Blogs 0 20.10.2008 11:05
axaptafreak: Getting new table fields into your form datasource Blog bot DAX Blogs 2 24.01.2008 22:51
Dynamics AX: SQL Tuning: Table & Index Scans Blog bot DAX Blogs 0 20.07.2007 11:50
Fred Shen: Tips on optimizing primary index in Axapta Blog bot DAX Blogs 0 28.10.2006 16:40
Говорят вышел SP2 для Axapta 3. Кто нибуть что знает на эту тему? soin DAX: Прочие вопросы 10 13.10.2003 10:43
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

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

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