SET PROCEDURE TO cusStopWatch.PRG ADDITIVE LOCAL m.loStopWatch, m.lcStartBuffer m.loStopWatch = CREATEOBJECT("cusStopWatch") m.lcStartBuffer = m.loStopWatch.Start() FOR m.i = 1 TO 5000 a=TRANSFORM(m.i) ENDFOR m.i ? "Elapsed time in seconds: " ; + TRANSFORM(m.loStopWatch.Stop(m.lcStartBuffer))Let me know what you think of it!
>SYS(3054,0) > >CREATE cursor LineTemp (BoIdBase i,NumCleared i,NumCleared1 I ) >FOR k=1 to 1000 > INSERT into LineTemp values (RECCOUNT(),0,0) >NEXT > >CLEAR > >CREATE CURSOR Details (BoIdBase i,RecType c, AirDate d , AirTime i) >FOR k=1 to 500000 > INSERT into Details values (RECCOUNT('LineTemp')*RAND(),IIF(RAND()>0.5,'A','B'),DATE()+RAND()*100,RAND()*3) >NEXT > > INDEX ON AirDate tag t3 > INDEX ON RecType tag t1 > INDEX ON AirTime tag t2 > > >dStartDate = DATE()+RAND()*10 >dEndDate = dStartDate +RAND()*50 > >? "WITHOUT A JOIN INDEX" > >TEST() > >? "WITH A JOIN INDEX" >SELECT Details > INDEX ON BoIdBase tag tb >TEST() > >PROCEDURE TEST > >T1=SECONDS() >UPDATE LineTemp SET NumCleared = (SELECT COUNT(*) FROM Details D WHERE D.BoIdBase = LineTemp.BoIdBase AND D.RecType = "A" AND; > NOT D.AirTime=0 AND D.AirDate BETWEEN m.dStartDate AND m.dEndDate) >? SECONDS()-T1 > >T1=SECONDS() >UPDATE LineTemp SET NumCleared1 = D.NumCleared FROM ; > (SELECT BoIdBase,COUNT(*) NumCleared FROM Details; > WHERE RecType = "A" AND NOT AirTime=0 AND AirDate BETWEEN m.dStartDate AND m.dEndDate GROUP BY 1) D ; > WHERE D.BoIdBase = LineTemp.BoIdBase > ? SECONDS()-T1 >