![]() |
#34 |
Участник
|
Решил проверить как в 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 |
|