Întrebări frecvente

Optimizare MySQL - Powered By Kayako SupportSuite
 Optimizare MySQL
Solutie

O importanta parte a unui site dinamic o reprezinta bazele de date. Pentru o functionare adecvata a site-urilor, se recomanda optimizarea periodica a tabelelor din bazele de date folosite si introducerea indecsilor pe coloanele folosite mai des.

Pentru a optimiza o baza de date, accesati baza de date folosind DBAdmin din interfata Parallels Plesk sau phpMyAdmin din interfata cPanel, in functie de tipul de hosting pe care il detineti. Interfata este aceeasi, in ambele cazuri. dati click pe baza de date pe care doriti sa o optimizati, si la sectiunea Structure selectati tabelele dorite si sub acestea o sa gasiti un meniu de tip drop-down cu mai multe optiuni. Din acest meniu selectati "optimize table". Aceasta operatiune ajuta in cazul bazelor de date care contin multe informatii si unde aceasta informatie este fragmentata.

Indecsii setati pe tabele sunt si acestia foarte importanti.  pentru a verifica daca un query SQL are configurati indecsi, folosind aceeasi interfata ca si mai sus folositi comanda SQL "EXPLAIN" in fata query-urilor folosite in codul dumneavoastra.

In momentul in care folositi un select simplu, nu prea are sens sa folositi indecsi, ca si in primul exemplu de mai jos, dar atunci cand folosti o clauza in query, situatia se schimba:

SELECT firstname FROM employee;

Acest select, nu ar avea de ce sa foloseasca un index, dar selectul:

SELECT prenume FROM angajat WHERE nume="Popescu";

ar fi mult mai rapid daca ar exista un index pe campul "nume". Ne gandim in acest moment la o tabela cu 10.000 de angajati din care 300 sunt Popescu, si vedem diferenta dintre un select executat pe 10.000 de campuri sau pe 300. Observam ca indecsii sunt foarte utili in momentul in care sunt aplicati pe campul folosit in clauzele "WHERE"

Adaugarea unui index pe campul nume se face folosind comanda:

ALTER TABLE angajat ADD INDEX(nume);

La un exemplu mai complex, putem sa folosim EXPLAIN pentru a ne usura query-ul, astfel, daca am vrea sa gasim toti angajatii a caror jumatate din plata pe zi este mai mica de 20 RON, astfel, adaugam un index pe campul "plata" dupa cum am decis mai sus, si avem:

ALTER TABLE angajat ADD INDEX(plata);

Sa rulam un EXPLAIN pe acest query:

EXPLAIN SELECT nume FROM angajat WHERE plata/2<20;

+----------+------+---------------+------+---------+------+------+------------+
| table    | type | possible_keys | key  | key_len | ref  | rows | Extra      |
+----------+------+---------------+------+---------+------+------+------------+
| angajat  | ALL  | NULL          | NULL |    NULL | NULL |    2 | where used |
+----------+------+---------------+------+---------+------+------+------------+

Se pare ca nu am obtinut efectul scontat, pentru ca am facut o operatiune cu indexul "plata/2", astfel, toate inregistrarile trebuie citite si trebuie efectuata impartirea la 2. Cum putem sa facem in asa fel incat sa nu efectuam operatii pe index? Daca ne aducem aminte ca x/2 = y este egal cu x = y*2 putem sa rescriem query-ul, astfel obtinem:

EXPLAIN SELECT nume FROM angajat WHERE plata<20*2;

+--------+-------+---------------+---------------+---------+------+------+----------+
|table   | type  | possible_keys | key           | key_len | ref  | rows |Extra     |
+--------+-------+---------------+---------------+---------+------+------+----------+
|angajat | range | plata         | plata         |       4 | NULL |    1 |where used|
+--------+-------+---------------+---------------+---------+------+------+----------+

In acest fel, am efectuat o singura data operatia 20*2 si apoi am cautat in index folosind o constanta.

O serie de resurse pentru optimizare query-uri MySQL.

  1. Identifying slow MySQL queries
  2. MySQL & PHP Performance Optimization Tips
  3. MySQL Presentations: Optimizing MySQL
  4. MySQL 5 Optimization and Tuning Guide
  5. Survive heavy traffic with your Web server
  6. Tools to use for MySQL Performance – Peter Zaitsev
  7. MySQL Queries Optimization (video) – Peter Zaitsev
  8. Table Design and MySQL Index Details
  9. MySQL Reference Manual: Optimization Overview
  10. MySQL Reference Manual: The MySQL Query Cache


Detaliile Articolului
ID-ul Articolului: 68
Creat la: 25 Oct 2010 03:15 PM

 Acest raspuns a fost de ajutor.  Acest raspuns nu a fost de ajutor.

 Inapoi

Help Desk Software By Kayako SupportSuite v3.60.04

Powered by WHMCompleteSolution

Navigare rapidă

Limba: