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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.07.2014, 09:38   #1  
at5454 is offline
at5454
Участник
 
61 / 10 (1) +
Регистрация: 29.05.2014
Оптимизация запроса
Здравствуйте! Вот есть запрос в методе. На sql сервере чтоб его ускорить я использовал времнные таблицы и вложенные запросы или еще что нибудь.
А что разрешается сделать в аксаптовком sql?
P.S. связей между таблицами больше никаких нет, параметров других тоже нет.
Заранее Спасибо

public static SMAServiceOrderTable pclose(str 20 _docnum)
{

SMAServiceOrderTable SMAServiceOrderTable;
N_SMAClaim N_SMAClaim;
T_WriteOnRepair T_WriteOnRepair;
;
select firstonly SMAServiceOrderTable where SMAServiceOrderTable.stageid == 'Закрыт'
join N_SMAClaim where SMAServiceOrderTable.serviceorderid == N_SMAClaim.DOCNUM
join T_WriteOnRepair where N_SMAClaim.t_repairid == T_WriteOnRepair.repairid
&& T_WriteOnRepair.docnum == _docnum;


return SMAServiceOrderTable;
}
Старый 09.07.2014, 10:06   #2  
S.Kuskov is offline
S.Kuskov
Участник
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
3,440 / 1775 (66) ++++++++
Регистрация: 28.04.2007
Адрес: Калуга
Таблицы T_WriteOnRepair и N_SMAClaim участвуют в запросе только для фильтрации, данные из них потом нигде не используются? Если так, то можно смело заменить "join" на "join TableId from", а учитывая firstonly даже на "exists join".

Если структура данных позволяет, то лучше разбить запрос на несколько. Т.е. если допустим поле docnum в таблице T_WriteOnRepair уникально, то лучше отдельным запросом выбрать нужную запись в этой таблице и взять из неё repairid, и т.д.

Ну и конечно индексы. Если нужных индексов ещё нет, то создайте - будет хороший прирост в скорости.
Старый 09.07.2014, 11:34   #3  
dech is offline
dech
Участник
Аватар для dech
Самостоятельные клиенты AX
 
647 / 350 (13) ++++++
Регистрация: 25.06.2009
Адрес: Омск
Записей в блоге: 3
Также хорошим тоном считается использование метода find(). Например:
X++:
static InventTable find(ItemId      itemId,
                        boolean     update = false)
{
    InventTable  inventTable;
    ;

    inventTable.selectForUpdate(update);

    if (itemId)
    {
        select firstonly inventTable
            index hint ItemIdx
            where inventTable.ItemId == itemId;
    }

    return inventTable;
}
__________________
// no comments
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
оптимизация запроса статистики по клиенту wojzeh DAX: Программирование 2 26.04.2011 05:08
Оптимизация запроса - ranges kashperuk DAX: Программирование 13 31.01.2011 20:19
Оптимизация запроса oleg_e DAX: Программирование 16 11.01.2008 10:22
Опять оптимизация запроса KpecT DAX: Программирование 3 02.11.2007 14:41
Оптимизация запроса Янка DAX: Программирование 1 27.04.2006 08:37

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

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

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