Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Select WITH Buffering = .t.
Message
 
 
À
14/07/2006 18:56:40
Information générale
Forum:
Visual FoxPro
Catégorie:
Base de données, Tables, Vues, Index et syntaxe SQL
Versions des environnements
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP
Database:
Visual FoxPro
Divers
Thread ID:
01136217
Message ID:
01136606
Vues:
42
For 100 records in buffer: NONE Buffering False 0.002000 Buffering True 0.001000
For 100 records in buffer: ALL Buffering False 0.002000 Buffering True 0.131000

For 200 records in buffer: NONE Buffering False 0.003000 Buffering True 0.003000
For 200 records in buffer: ALL Buffering False 0.007000 Buffering True 0.662000

For 400 records in buffer: NONE Buffering False 0.006000 Buffering True 0.005000
For 400 records in buffer: ALL Buffering False 0.005000 Buffering True 2.594000

For 800 records in buffer: NONE Buffering False 0.010000 Buffering True 0.010000
For 800 records in buffer: ALL Buffering False 0.011000 Buffering True 9.751000

For 1600 records in buffer: NONE Buffering False 0.019000 Buffering True 0.021000
For 1600 records in buffer: ALL Buffering False 0.016000 Buffering True 40.074000

For 3200 records in buffer: NONE Buffering False 0.036000 Buffering True 0.037000
For 3200 records in buffer: ALL Buffering False 0.035000 Buffering True 205.966000

For 6400 records in buffer: NONE Buffering False 0.077000 Buffering True 0.070000
For 6400 records in buffer: ALL Buffering False 0.075000 Buffering True 720.786000
>>I think we need to work with my colleague on a different algorithm. I do, of course, appreciate some input on the problem from MS or from Fabio, but our experiments proved BUFFERING = .T. to be a culprit.
>
>Buffering slow down every operation a lot,
>this is true with buffering=.T., too.
>
>WITH buffering = .t. vfp doesn't optimize every buffered record
>( this is not necessary for me, and VFPT can optimize the query )
>
>try this extreme case, with an exclusive cursor.
>
>When reccount doubles, time quadruples:
>
>CLEAR
>
>CREATE CURSOR testbuffering (pk i autoincr, field1 L)
>FOR k=1 TO 50
>	INSERT INTO (ALIAS()) ( field1 ) VALUES (.F. )
>NEXT
>
>* build an index is useless
>* INDEX ON PK TAG TPK
>
>FOR k=1 TO 4
> INSERT INTO (ALIAS()) (field1) SELECT .f. FROM ALIAS()
> testtime()
>NEXT
>
>PROCEDURE testtime()
>
>CURSORSETPROP("Buffering",5)
>
>* allocate memory
>test(.f.)
>
>? RECCOUNT(),"records in buffer: NONE"," buffering False" at 40, test(.F.) at 60, " True" at 80, test(.T.) at 90
>
>REPLACE all field1 WITH field1
>
>? RECCOUNT(),"records in buffer: ALL"," buffering False" at 40, test(.F.) at 60, " True" at 80, test(.T.) at 90
>
>TABLEREVERT(.T.)
>CURSORSETPROP("Buffering",1)
>
>PROCEDURE test(buffering)
>	t1=SECONDS()
>	SELECT COUNT(*) FROM testbuffering T1 ;
>					JOIN testbuffering T2 with (buffering=M.buffering);
>						ON T1.PK=T2.PK;
>			INTO ARRAY ASELECT
>	RETURN SECONDS()-T1
>
If it's not broken, fix it until it is.


My Blog
Précédent
Répondre
Fil
Voir

Click here to load this message in the networking platform