>local lnMax, lnMin, lnI, lnK, lnParent >if not file('Parents.dbf') > create table parents (ParentID I) > index on ParentID tag ParentID > create table Children (ParentID I, ChildID I) > index on ParentID tag ParentID > rand(-1) > > lnMax=1 > lnMin = 10000 >** Create test tables > for ln=1 to 500 > lnParent = int((m.lnMax - m.lnMin + 1) * rand( ) + m.lnMin) > if not indexseek(m.lnParent,.f.,'Parents','ParentID') > insert into parents ; > values (m.lnParent) > for lnK=1 to 1000 > insert into Children ; > values (m.lnParent,m.lnK) > next > endif > next >endif >local lnSec, lnRecno, lnChildren >select Children >set order to ParentID >select parents >set relation to ParentID into Children >lnSec=seconds() >scan && Parent > lnParent = ParentID > select Children > lnRecno=recno() > count for ParentID = m.lnParent to lnChildren > goto m.lnRecno && Restore record pointer >endscan >?seconds()- m.lnSec >go top && in parents >lnSec=seconds() >scan && Parent > lnParent = ParentID > select Children > lnRecno=recno() > seek m.lnParent > count while ParentID = m.lnParent to lnChildren > goto m.lnRecno && Restore record pointer >endscan >?seconds()- m.lnSec>