Я всегда считал, что join таблиц отрабатывает быстрее чем 2 while select`а. Но вот увидел в коде двойной while select и решил "исправить". После переписывания запроса на join код стал выполняться дольше. Написал простой job
X++:
static void JobJoin(Args _args)
{
SalesTable SalesTable;
SalesLine SalesLine;
int startTime, endTime, i;
;
startTime = timenow();
while select SalesTable
{
while select SalesLine
where SalesLine.SalesId == SalesTable.SalesId
{
i++;
}
}
endTime = timenow();
info(strFmt("2 while select: %1, i = %2", endTime - startTime, i));
i = 0;
startTime = timenow();
while select SalesTable
join SalesLine
where SalesLine.SalesId == SalesTable.SalesId
{
i++;
}
endTime = timenow();
info(strFmt("join: %1, i = %2", endTime - startTime, i));
}
У меня получилось (Ax 3.0 SP3 KR2, SQL2005 SP2)
X++:
2 while select: 99, i = 56347
join: 129, i = 56347
Получается что 2 while select'а отрабатывают быстрее
Может кто нибудь дать научное обоснование сему явлению?