Показать сообщение отдельно
Старый 22.01.2009, 18:49   #1  
_scorp_ is offline
_scorp_
Участник
Аватар для _scorp_
MCBMSS
 
488 / 369 (13) ++++++
Регистрация: 25.07.2007
Адрес: Москва
2 while select или join?
Я всегда считал, что 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'а отрабатывают быстрее Может кто нибудь дать научное обоснование сему явлению?