Walter Meester
HoogkarspelPays-Bas
Information générale
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Versions des environnements
Hi Howard,
I guess you missed the point. The point is that if you are :
1. changing the workarea
2. Trying to locate a or change a record in another workarea than the selected one
There is a tremendous decrease of performance when having lots of tables open.
Walter,
>Try this instead:
>
>CLEAR ALL
>CLEAR
>SET TALK OFF
>SET NULL ON
>
>
>?
>? "2 tables"
>? "---------"
>FOR nT = 51 TO 52
> SELECT 0
> CREATE CURSOR ("Res"+ALLTRIM(STR(nT))) (C C(1))
> APPEND BLANK
>ENDFOR
>DO TestPerf
>
>?
>? "10 tables"
>? "---------"
>CLEAR ALL
>FOR nT = 50 TO 60
> SELECT 0
> CREATE CURSOR ("Res"+ALLTRIM(STR(nT))) (C C(1))
> APPEND BLANK
>ENDFOR
>DO TestPerf
>
>?
>? "60 tables"
>? "---------"
>
>CLEAR ALL
>FOR nT = 1 TO 60
> SELECT 0
> CREATE CURSOR ("Res"+ALLTRIM(STR(nT))) (C C(1))
> APPEND BLANK
>ENDFOR
>DO TestPerf
>
>?
>? "100 tables"
>? "---------"
>
>CLEAR ALL
>FOR nT = 1 TO 100
> SELECT 0
> CREATE CURSOR ("Res"+ALLTRIM(STR(nT))) (C C(1))
> APPEND BLANK
>ENDFOR
>DO TestPerf
>
>
>FUNCTION TestPerf
>
>nSec= SECONDS()
>
>FOR nT = 1 TO 100000
> SELECT Res51
> SELECT Res51
>ENDFOR
>
>? "No workarea change", SECONDS() - nSec
>
>nSec= SECONDS()
>
>FOR nT = 1 TO 100000
> SELECT Res51
> SELECT Res52
>ENDFOR
>
>? "200.000 workarea changes", SECONDS() - nSec
>
>nSec= SECONDS()
>
>SELECT Res51
>FOR nT = 1 TO 100000
> REPLACE Res51.C WITH "X"
>ENDFOR
>
>? "100.000 replacements in current workarea", SECONDS() - nSec
>
>nSec= SECONDS()
>
>SELECT Res51
>FOR nT = 1 TO 100000
> REPLACE Res51.C WITH "X"
>ENDFOR
>
>? "100.000 replacements in other workarea", SECONDS() - nSec
>
>SELECT Res51
>INDEX ON C TAG C
>SELECT Res52
>INDEX ON C TAG C
>
>nSec= SECONDS()
>
>SELECT Res51
>FOR nT = 1 TO 100000
> SEEK "X"
>ENDFOR
>
>? "100.000 seeks in current workarea", SECONDS() - nSec
>
>nSec= SECONDS()
>
>SELECT Res52
>FOR nT = 1 TO 100000
> SEEK "X"
>ENDFOR
>
>? "100.000 seeks in other workarea", SECONDS() - nSec
>
>nSec= SECONDS()
>
>SELECT Res51
>FOR nT = 1 TO 100000
> GO 1
>ENDFOR
>
>? "100.000 Go's in current workarea", SECONDS() - nSec
>
>nSec= SECONDS()
>
>SELECT Res52
>FOR nT = 1 TO 100000
> GO 1
>ENDFOR
>
>? "100.000 go's in other workarea", SECONDS() - nSec
Précédent
Répondre
Voir le fil de ce thread
Voir le fil de ce thread à partir de ce message seulement
Voir tous les messages de ce thread
Voir tous les messages de ce thread à partir de ce message seulement