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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.12.2011, 14:02   #34  
Logger is offline
Logger
Участник
Лучший по профессии 2015
Лучший по профессии 2014
 
3,996 / 3293 (117) ++++++++++
Регистрация: 12.10.2004
Адрес: Москва
Записей в блоге: 2
Решил проверить как в 2009-й работает джоин временной и постоянной таблички.
Для этого сделал постоянную табличку GRD_TmpAccountSum - близнеца времянки.
и попробовал позапускать джобик для разных комбинаций.

X++:
// [url=http://axforum.info/forums/showthread.php?p=264151#post264151]Временные таблицы и скорость работы[/url]
static void glibs_Job2(Args _args)
{
    TmpAccountSum tmpAccountSum1;
//    GRD_TmpAccountSum tmpAccountSum1;
    TmpAccountSum tmpAccountSum2;
//    GRD_TmpAccountSum tmpAccountSum2;
    Counter i;
    FreeText text;
    Counter startTime;

    #Define.cycles(1000)
    ;
    info(strFMT("isRunningOnServer() = %1", Global::isRunningOnServer()));
    info(strFMT("tmpAccountSum1.isTmp() = %1", tmpAccountSum1.isTmp()));
    info(strFMT("tmpAccountSum2.isTmp() = %1", tmpAccountSum2.isTmp()));
    delete_from tmpAccountSum1;
    delete_from tmpAccountSum2;
    
    startTime = WinAPI::getTickCount();
    for (i = 0; i <= #cycles; i++)
    {
        tmpAccountSum1.clear();
        tmpAccountSum2.clear();
        text = int2str(i);
        tmpAccountSum1.AccountNum = strrep("0", 20 - strlen(text)) + text;
        tmpAccountSum2.AccountNum = strrep("0", 20 - strlen(text)) + text;

        tmpAccountSum1.Balance01 = 999999 * 888888;
        tmpAccountSum2.Balance01 = 999999 * 888888;
        tmpAccountSum1.Balance02 = 999999 * 888888;
        tmpAccountSum2.Balance02 = 999999 * 888888;
        tmpAccountSum1.Balance03 = 999999 * 888888;
        tmpAccountSum2.Balance03 = 999999 * 888888;
        tmpAccountSum1.Balance04 = 999999 * 888888;
        tmpAccountSum2.Balance04 = 999999 * 888888;
        tmpAccountSum1.Balance05 = 999999 * 888888;
        tmpAccountSum2.Balance05 = 999999 * 888888;
        tmpAccountSum1.Balance06 = 999999 * 888888;
        tmpAccountSum2.Balance06 = 999999 * 888888;
        tmpAccountSum1.Balance07 = 999999 * 888888;
        tmpAccountSum2.Balance07 = 999999 * 888888;
        tmpAccountSum1.Balance10 = 999999 * 888888;
        tmpAccountSum2.Balance10 = 999999 * 888888;
        tmpAccountSum1.TaxCode = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum2.TaxCode = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum1.CurrencyCode = "XXX";
        tmpAccountSum2.CurrencyCode = "XXX";
        tmpAccountSum1.Posting = 1;
        tmpAccountSum2.Posting = 1;
        tmpAccountSum1.Dimension[1] = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum2.Dimension[1] = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum1.Dimension[2] = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum2.Dimension[2] = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum1.Dimension[3] = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum2.Dimension[3] = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum1.OperationsTax = 1;
        tmpAccountSum2.OperationsTax = 1;
        tmpAccountSum1.TransDate = today();
        tmpAccountSum2.TransDate = today();
        tmpAccountSum1.Txt = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum2.Txt = "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" +
        "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum1.SortDate = today();
        tmpAccountSum2.SortDate = today();
        tmpAccountSum1.Balance01Cur = 999999 * 888888;
        tmpAccountSum2.Balance01Cur = 999999 * 888888;
        tmpAccountSum1.Qty01 = 999999 * 888888;
        tmpAccountSum2.Qty01 = 999999 * 888888;
        tmpAccountSum1.Qty02 = 999999 * 888888;
        tmpAccountSum2.Qty02 = 999999 * 888888;
        tmpAccountSum1.Qty03 = 999999 * 888888;
        tmpAccountSum2.Qty03 = 999999 * 888888;
        tmpAccountSum1.Voucher = "XXXXXXXXXXXXXXXXXXXX";
        tmpAccountSum2.Voucher = "XXXXXXXXXXXXXXXXXXXX";

        tmpAccountSum1.insert();
        tmpAccountSum2.insert();
    }
    info (strfmt("Prepare data took %1 seconds", (WinAPI::getTickCount() - startTime) / 1000));

    startTime = WinAPI::getTickCount();
    i = 0;
    while select tmpAccountSum1
    join tmpAccountSum2
    where tmpAccountSum1.AccountNum == tmpAccountSum2.AccountNum
    {
        text = tmpAccountSum1.Voucher + tmpAccountSum2.Voucher;
        i++;
    }
    info (strfmt("Join %1 loops", i));
    info (strfmt("Join %1 seconds", (WinAPI::getTickCount() - startTime) / 1000));

    startTime = WinAPI::getTickCount();
    i = 0;
    while select tmpAccountSum1
    {
        while select tmpAccountSum2
        where tmpAccountSum2.AccountNum == tmpAccountSum1.AccountNum
        {
            text = tmpAccountSum1.Voucher + tmpAccountSum2.Voucher;
            i++;
        }
    }
    info (strfmt("Sub while select %1 loops", i));
    info (strfmt("Sub while select %1 seconds", (WinAPI::getTickCount() - startTime) / 1000));

}

Цитата:
isRunningOnServer() = 1
tmpAccountSum1.isTmp() = true
tmpAccountSum2.isTmp() = true
Prepare data took 0,42 seconds
Join 1001 loops
Join 6,91 seconds
Sub while select 1001 loops
Sub while select 0,06 seconds


isRunningOnServer() = 1
tmpAccountSum1.isTmp() = false
tmpAccountSum2.isTmp() = true
Prepare data took 2,34 seconds
Join 1001 loops
Join 7,03 seconds
Sub while select 1001 loops
Sub while select 0,08 seconds

isRunningOnServer() = 1
tmpAccountSum1.isTmp() = true
tmpAccountSum2.isTmp() = false
Prepare data took 2,25 seconds
Join 1001 loops
Join 1,28 seconds
Sub while select 1001 loops
Sub while select 1,45 seconds

isRunningOnServer() = 1
tmpAccountSum1.isTmp() = false
tmpAccountSum2.isTmp() = false
Prepare data took 2,27 seconds
Join 1001 loops
Join 0,06 seconds
Sub while select 1001 loops
Sub while select 1,25 seconds
Теги
временная таблица, оптимизация, полезное, производительность

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Как правильно именовать временные таблицы Владимир Максимов DAX: Программирование 22 17.05.2011 21:03
Временные таблицы и их временные файлы AraraT® DAX: Прочие вопросы 6 12.04.2010 00:39
Не страшно ли временные таблицы временно сделать постоянными? Gustav DAX: Программирование 11 09.02.2006 11:04
Временные таблицы vasiliy DAX: Программирование 6 09.11.2004 11:04
Временные таблицы в запросе Dron AKA andy DAX: Программирование 4 06.09.2002 12:14

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

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

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