#DEFINE MAX_RECORDS 50000 IF NOT DIRECTORY('vartest') MD vartest ENDIF CLOSE TABLES all CD VarTest ERASE vtable?.dbf ERASE vtable?.cdx CREATE TABLE vtable1 (keyid I, item_no v(10), descript v(30)) CREATE TABLE vtable2 (keyid I, item_no v(10)) SELECT vtable1 INDEX on keyid TAG keyid INDEX on item_no TAG item_no SELECT vtable2 INDEX on keyid TAG keyid INDEX on item_no TAG item_no lnChildRecs = MAX_RECORDS/100 FOR lnI = 1 TO MAX_RECORDS lcItem = TRANSFORM(201000 + lnI) lcDesc = 'Item description #' + TRANSFORM(lnI) INSERT INTO vtable1 VALUES (lnI, lcItem, lcDesc) IF MOD(lnI, lnChildRecs) = 0 INSERT INTO vtable2 VALUES (lnI/lnChildRecs, lcItem) ENDIF ENDFOR CLOSE TABLES all SYS(3054, 11) CLEAR lcOldExact = SET("Exact") SET EXACT OFF ? ? '*** SET EXACT = OFF ***' ? ? 'Begin slow retrieval (uses single = in the join)... ' ? lnStart = SECONDS() SELECT vtable1.*, vtable2.keyid as table2_id ; FROM vtable1 JOIN vtable2 ON vtable1.item_no = vtable2.item_no ; INTO CURSOR crsResults ? ? 'Elapsed time:', SECONDS() - lnStart ? ? CLOSE TABLES all ? 'Begin fast retrieval (uses "==" in the join)... ' ? lnStart = SECONDS() SELECT vtable1.*, vtable2.keyid as table2_id ; FROM vtable1 JOIN vtable2 ON vtable1.item_no == vtable2.item_no ; INTO CURSOR crsResults ? ? 'Elapsed time:', SECONDS() - lnStart ? ? ? CLOSE TABLES all SET EXACT ON ? '*** SET EXACT = ON ***' ? ? 'Begin slow retrieval (uses single = in the join)... ' ? lnStart = SECONDS() SELECT vtable1.*, vtable2.keyid as table2_id ; FROM vtable1 JOIN vtable2 ON vtable1.item_no = vtable2.item_no ; INTO CURSOR crsResults ? ? 'Elapsed time:', SECONDS() - lnStart ? ? CLOSE TABLES all ? 'Begin fast retrieval (uses "==" in the join)... ' ? lnStart = SECONDS() SELECT vtable1.*, vtable2.keyid as table2_id ; FROM vtable1 JOIN vtable2 ON vtable1.item_no == vtable2.item_no ; INTO CURSOR crsResults ? ? 'Elapsed time:', SECONDS() - lnStart ? CLOSE TABLES all CD .. SET EXACT &lcOldExact