前几天,在做系统优化的时候,居然发现代码当中存在while嵌套循环语句
while select table 1
{
…
while select table2
以前并不太在意,但是既然要系统优化,就只怕没找到东西可以改的。突然忽发奇想,何不测试一下这样做的系统开销有多大呢?于是写了三个job,进行测试
static void TestInnerJoinUsingWhile(Args _args)
{
...
;
startTime = WinApi::getTickCount();
while select ledgerTrans
where ledgerTrans.AccountNum == accountNum &&
((ledgerTrans.TransDate >= 1/7/2005 &&
ledgerTrans.TransDate <= 31/7/2005))
{
while select projTransPosting
where projTransPosting.Voucher == ledgerTrans.voucher &&
projTransPosting.Account == accountNum
{
...
tmpFRD_LedgerDriDwnContractDtls.insert();
}
}
endTime = WinApi::getTickCount();
duration = endTime - startTime;
Info(int2str(duration));
}
static void TestInnerJoinUsingJoin(Args _args)
{
while select ledgerTrans
where ...
join projTransPosting
where ...
}
static void TestExistsJoinUsingJoin(Args _args)
{
...
while select ledgerTrans
where ...
exists join projTransPosting
where ...
} 结果发现使用嵌套while的时间是4012微秒,Inner join是1986微秒,exists join是1689微秒。可见在写代码的时候,还是需要按照Best Practice的要求,这样才能获得最好的performance。