"Stevenson, Charles" <[EMAIL PROTECTED]> wrote:
<snips>
Which would you suppose is much faster:
...
      FOR I = 1 TO 100
         EXECUTE 'SELECT VOC WITH TYPE = "V" COUNT.SUP'
         LOOP WHILE READNEXT ID
            NULL ;* GOSUB DO.STUFF
         REPEAT
      NEXT I
...
or
...
      OPEN 'VOC' TO F ELSE STOP
      FOR I = 1 TO 100
      SELECT F
      LOOP WHILE READNEXT  ID
         READ REC FROM F, ID THEN
            IF REC[1,1]='V' THEN
               NULL ;* GOSUB DO.STUFF
            END
         END
      REPEAT
...
Notice how much less work #2 (seemingly) does:
...
Method 2 takes 2 or 3 times as longer to run than Method 1. It's not
because VOC is a special file.
I've tried it on other files, big and small.
...
</snips>

It is my understanding that UniData (at least...don't know about UniVerse)
cache's the SELECT in Method 1.  You can see this from ECL by timing a huge
select, then CLEARSELECT, then re-issue the original select.  The second
run will come back much quicker.

Also, Method 2 reads the block from the file and reallocates the value of
"REC" for each iteration, while Method 1 reads each block once and parses
for ID's.  Assuming 10-20 records per block (recommended file sizing from
my UniData Admin trainer), that's a 10- to 20-fold savings on disk reads.

--Tom Pellitieri
-------
u2-users mailing list
[EMAIL PROTECTED]
To unsubscribe please visit http://listserver.u2ug.org/

Reply via email to