Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Client/Server  Optimizare SQL...
 Optimizare SQL
 
 1/23/2012 11:19:25 AM
User is offlinegavroche
82 posts


Optimizare SQL
 (N/A)
Pe tabele neindexate cu peste 100.000 inregistrari, care comanda e mai rapida?
1. delete for conditie
2. delete from table where conditie
======================================================
Daca am un cursor mare in FOX si vreau sa il duc in MYSQL, aveti vreo solutie mai rapida decat asta?:
select cursor
scan
   scatter memvar O_cursor
   sqlexec(conn,"insert into mysql_table (camp1,camp2,camp3) values (?Ocursor.camp1,?Ocursor.camp2,?Ocursor.camp3)")
endscan


 1/23/2012 11:26:47 AM
User is offlinemyself
64 posts


Re: Optimizare SQL
 (N/A)
Pentru a 2-a problema, cred ca poti folosii tranzactii, si sa faci commit la fiecare 1000 de inserturi. Pentru serverul de date pe care il folosesc viteza a crescut de vreo 5-6 ori.
Uite si aici un link : http://dev.mysql.com/doc/refman/5.0/en/commit.html
 1/23/2012 12:04:38 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Optimizare SQL
 (N/A)
 gavroche wrote
Pe tabele neindexate cu peste 100.000 inregistrari, care comanda e mai rapida?
1. delete for conditie
2. delete from table where conditie
======================================================
Daca am un cursor mare in FOX si vreau sa il duc in MYSQL, aveti vreo solutie mai rapida decat asta?:
select cursor
scan
   scatter memvar O_cursor
   sqlexec(conn,"insert into mysql_table (camp1,camp2,camp3) values (?Ocursor.camp1,?Ocursor.camp2,?Ocursor.camp3)")
endscan


La punctul 1: e acelasi lucru. Diferenta e ca prima comanda sterge din aliasul curent, iar a doua sterge din aliasul specificat, da' e tot aceeasi stergere.
La punctul 2: Viteza de executie e influentata de setarea SQLGetProp(handle, "Transactions"). Valoarea implicita este 1 - automatic, si asta inseamna ca VFP creeaza o tranzactie pentru fiecare comanda SQLExec procesata si asta scade simtitor viteza de executie.

Cele mai bune rezultate se obtin setand procesarea tranzactiilor pe manual, cu SQLSetProp(handle,2) si la sfarsit SQLCommit(handle), si profitand de faptul ca MySQL stie sa insereze mai multe randuri intr-un singur Insert, sa generezi comenzile Insert dupa modelul urmator:

Insert Into myTable
(camp1, camp2, camp3, camp4)
Values
(camp1r1, camp2r1, camp3r1, camp4r1),
(camp1r2, camp2r2, camp3r2, camp4r2),
(camp1r3, camp2r3, camp3r3, camp4r3),
......
(camp1rN, camp2rN, camp3rN, camp4rN)

Batch-ul il stabilesti tu. De exemplu, ai putea itera prin 100 de randuri din cursor, generezi un SQL, il trimiti, iterezi prin urmatoarele 100 de inregistrari, le trimiti, s.a.m.d., si la sfarsit SQLCommit.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 1/23/2012 12:57:18 PM
User is offlinegavroche
82 posts


Re: Optimizare SQL
 (N/A)
Multumesc Grig. Treaba cu  setarea SQLSetProp(handle, "Transactions",2) face diferenta (de la 200 secunde timp de inserare am ajuns la 7,5 secunde).
Incerc sa fac si treaba cu insertul mai multor linii deodata dar ca sa imi construiesc sirul am multe conversii de facut.
De exemplu la toate campurile numerice imi trebuie alltrim(str(camp))
la cele cu virgula imi trebuie alltrim(str(camp,5,2))
la cele de tip date trebuie sa convertesc data din fox in formatul yyyy-mm-dd sa sa il fac si de tip char.

 1/23/2012 12:58:44 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Optimizare SQL
 (N/A)
Foloseste functia TRANSFORM() si ai scapat de griji ;)

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 1/23/2012 1:27:05 PM
User is offlinegavroche
82 posts


Re: Optimizare SQL
 (N/A)
Ma uit in functia transform () ca tzaranul la Iphone.
Chiar nu inteleg cum as putea s-o folosesc sa imi converteasca data de la {23/01/2012} la '2012-01-23'
HELP PLS !
 1/23/2012 1:45:39 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: Optimizare SQL
 (N/A)
Ar trebui sa mearga Dtos(date()) sau Dtoc(date(),1).
Daca nu, Tran(dtos(date(),'@R 9999-99-99')

Poti incerca sa faci insert pe server cu un cursor updatabil. Vezi aici :
http://www.universalthread.com/ViewPageNewFAQ.aspx?ID=8153

Daniel Buduru
 1/23/2012 1:50:40 PM
User is offlinerediac
10 posts


Re: Optimizare SQL
 (N/A)
incearca si :
load data local infile ....

s-ar putea sa ai surpriza sa mearga mai repede (depinde de context)
 1/23/2012 1:53:08 PM
User is offlinegavroche
82 posts


Re: Optimizare SQL
 (N/A)
Cine stie, cunoaste.
Tran(dtos(date()),'@R 9999-99-99')
E perfect. Multumesc mult.
 1/23/2012 2:23:57 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Optimizare SQL
 (N/A)
 gavroche wrote
Ma uit in functia transform () ca tzaranul la Iphone.
Chiar nu inteleg cum as putea s-o folosesc sa imi converteasca data de la {23/01/2012} la '2012-01-23'
HELP PLS !


Pai ideea e ca TRANSFORM() transforma orice in string, exact in forma in care e. Scopul povestii e sa nu mai testezi daca ai camp de tip date, ci doar sa folosesti TRANSFORM(camp1), Transform(camp2), etc etc. Si fiindca data calendaristica e in alt format, inainte de iteratie iti setezi data cum iti trebuie, cu SET DATE YMD,  SET CENTURY ON si SET MARK TO "-", si  iata ca ai data in formatul in care iti trebuie, direct din tabela. Acum aplici doar TRANSFORM(), in iteratie.

Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
  Visual FoxPro  Client/Server  Optimizare SQL...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement