optimizare interogare Mysql - utilizarea indicilor - ordinea alternativă prin - exemplele din perl

MySQL un set mare de funcții pentru diverse tipuri (ORDER BY), grupuri (GROUP BY), asociații (LEFT JOIN sau DREAPTA join) și așa mai departe. Toate acestea sunt cu siguranță convenabil, dar, într-un one-off cereri. De exemplu, în cazul în care persoana ai nevoie de ceva să sape în bază folosind o grămadă de mese și ligamente, în afară de funcțiile de mai sus este posibil și chiar necesar să se utilizeze o instrucțiune condițională IF. Principala greșeală a începătorilor este un efort de a introduce o astfel de cerere în codul de funcționare a site-ului. În acest caz, interogarea complexă cu siguranta frumos, dar este dăunătoare. Lucru este că toți operatorii de soiuri, grupuri, asociații sau interogări imbricate nu pot fi efectuate în memorie, și de a folosi hard disk pentru a crea tabele temporare. Un tare, după cum știți - cel mai îngust loc al serverului.

Reguli de optimizare interogare MySQL

1. Evitați interogări imbricate

Aceasta este cea mai gravă greșeală. Părintele va fi întotdeauna de așteptare pentru copil și în acest moment pentru a păstra conexiunea la baza de date, utilizați discul și încărcați iowait. Două interogare paralelă cu baza de date și de a efectua filtrarea dorită în coajă de server (Perl. PHP și t. D.) Executat mult mai rapid decât incapsulate.

Exemple de perl. cum să nu facă:

sau, în orice caz, astfel:

În cazul în care este nevoie de o astfel de acțiune, în toate cazurile, este mai bine să se utilizeze un hash, matrice, sau orice alt mod de a filtra.

Exemplul din perl, cum fac de obicei fac:

2. Nu sorta, nu sunt grupate sau filtre în baza

Dacă este posibil, nu utilizați în declarația lor de interogare ORDER BY, GROUP BY, JOIN. Ei folosesc toate tabelele temporare. În cazul în care sortarea sau gruparea este necesară numai pentru a afișa elementele, cum ar fi alfabetul, este mai bine pentru a efectua aceste acțiuni în interpret variabile.

Exemple de perl, și nici nu ar trebui să sorteze:

Exemplul din perl, ca un fel eu de obicei:

Deci, mult mai rapid. Mai ales o diferență în cazul în care o mulțime de date. Dacă doriți să sortați în perl pe mai multe domenii, puteți aplica sortarea Schwartz. Dacă doriți să fie orice ordine de sortare după RAND () - utilizați o sortare aleatorie în perl.

3. Utilizați indexurile

Dacă se poate renunța, în unele cazuri, atunci va fi posibil de unde cu greu genul în baza de date. Prin urmare, pentru câmpuri, care vor merge la o comparație, este necesar să se stabilească indicii. Tocmai au făcut.

În cazul în care 255 - lungimea cheii. Pentru anumite tipuri de date, nu este necesar. Detalii în documentația pentru MySQL.