relOp is one of the following relational operators: <, >, =, <=, >=, <>, #, ==, or !=. ...but optimization for <> # != expressions is not done.
SET TALK OFF SET ESCAPE ON CREATE CURSOR Test (ID I,A Y) ZeroDensity=(1.0000000-1/1000) =RAND(1) FOR hju=1 TO 100000 INSERT INTO Test VALUES (RAND()*RECNO(),IIF(RAND()<m.ZeroDensity,$0,RAND()*$5000000)) NEXT ? RECCOUNT(),_tally INDEX ON A TAG IA INDEX ON ID DESCENDING TAG IID *!* tz=SECONDS() *!* SELECT TOP 1 A,id FROM Test WHERE A#$0 ORDER BY ID DESC INTO ARRAY aId *!* ? SECONDS()-tz,' Select',aId,aId[2] COUNT ALL WHILE A=$0 TO tal ? 'STEPS TO FOUND',_TALLY,tal,RECNO() tz=SECONDS() FOR HU=1 TO 10000 LOCATE SCAN WHILE A=$0 ENDSCAN NEXT ? SECONDS()-tz,'LOCATE + SCAN ',RECNO() tz=SECONDS() FOR HU=1 TO 10000 GO TOP SCAN WHILE A=$0 ENDSCAN NEXT ? SECONDS()-tz,'GO TOP + SCAN ',RECNO() tz=SECONDS() FOR HU=1 TO 10000 SCAN ALL WHILE A=$0 ENDSCAN NEXT STORE A TO maxId ? SECONDS()-tz,' SCAN ALL ',RECNO() tz=SECONDS() FOR HU=1 TO 10000 LOCATE FOR A#$0 NEXT STORE A TO maxId ? SECONDS()-tz,' LOCATE OPTIMIZED #',RECNO() tz=SECONDS() FOR HU=1 TO 10000 LOCATE FOR A>$0 OR A<$0 NEXT STORE A TO maxId ? SECONDS()-tz,' LOCATE OPTIMIZED < OR >',RECNO() tz=SECONDS() FOR HU=1 TO 10000 LOCATE FOR A<$0 OR A>$0 NEXT STORE A TO maxId ? SECONDS()-tz,' LOCATE OPTIMIZED > OR <',RECNO() tz=SECONDS() FOR HU=1 TO 10000 LOCATE FOR A#$0 NOOPTIMIZE NEXT STORE A TO maxId ? SECONDS()-tz,' LOCATE NOOPTIMIZED #',RECNO() tz=SECONDS() FOR HU=1 TO 10000 LOCATE FOR A>$0 NEXT STORE A TO maxId ? SECONDS()-tz,' LOCATE OPTIMIZED >',RECNO() tz=SECONDS() FOR HU=1 TO 10000 LOCATE FOR A>$0 NOOPTIMIZE NEXT STORE A TO maxId ? SECONDS()-tz,' LOCATE NOOPTIMIZED >',RECNO()Fabio