Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
How do I optimize this query?
Message
From
25/06/2003 10:14:08
 
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
00803505
Message ID:
00803758
Views:
12
Hi Sergey,

yes, it is documented on the VFP help, but i cannot found a case where
LOCATE is faster of GO TOP; you can ?

Another problem is this ( Bug ? ):

from Help
relOp is one of the following relational operators: <, >, =, <=, >=, <>, #, ==, or !=. ...
but optimization for <> # != expressions is not done.
Example:
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
Previous
Reply
Map
View

Click here to load this message in the networking platform