MySQL: explicări, dubluri, înlocuiri…


Nu am prea scris aici, pe CNet.ro, despre MySQL deşi intenţia am avut-o. Mai ales îmi doresc să scriu cândva ceva materiale introductive pentru cei care nu au lucrat până acum cu SQL (şi MySQL). Până atunci însă aş dori să pun aici trei coduri care mi se par de mare folos (de fapt mie mi-au fost de mare folos zilele acestea). Şi vom încerca să vedem trei situaţii cu care aproape sigur că nu vă confruntaţi acum (mă refer la cei ce citesc curent articolele), dar când va fi, fie vă veţi aminti, fie căutarea pe Google vă va conduce aici :) . Şi începem cu primul scenariu: cât de “grea” e o interogare? Cât de bine e scrisă ea? Sau mai direct: e optimizată? Mai ales când lucrăm cu sute de mii ori milioane de înregistrări, o interogare scrisă prost poate afecta performanţa unei webaplicaţii.

imagine

Mai sus vedeţi o interogare pe o tabelă cu peste 180.000 de înregistrări (deci destul de mică). Căutarea unei anumite înregistrări poate să facă baleierea tuturor înregistrărilor, sau doar a uneia. Diferenţa de “cost”? În acest caz “doar” peste 180.000 de înregistrări sărite. Ambele interogări (cea de sus şi cea de jos) returnează aceeaşi înregistrare: prima însă trecând prin toate înregistrările, a doua mergând la fix. De ce? Pentru că a doua foloseşte un câmp cu indexare. Dar ceea ce vreau să subliniez din ambele interogări este altceva: folosirea lui EXPLAIN în faţa interogării propriu-zise: rezultatul sunt detalii importante despre cum se execută interogarea.

imagine

O altă problemă, mai concretă: avem o tabelă şi ne interesează dacă există dubluri pentru un anumit câmp. Desigur, dacă am definit câmpul să nu permită dubluri nu avem aşa ceva. Dar altfel ar putea fi de interes în anumite situaţii (să vedem dacă într-o tabelă cu utilizatori cineva s-a înscris de mai multe ori cu aceeaşi adresă de email; dacă într-o tabelă cu medii, cu multe zecimale, sunt cumva doi elevi care au aceeaşi medie; ş.a.) şi atunci folosim o interogare de genul:

[SQL]SELECT ceva,COUNT(ceva) AS cate FROM tabelacucev
GROUP BY ceva HAVING cate>1 ORDER BY cate DESC;[/SQL]

Şi ultimul caz concret: dorim să înlocuim nişte informaţii într-o tabelă. Eu de exemplu am mutat un sit WordPress zilele trecute de pe un subdomeniu pe alt subdomeniu. A trebuit să fac două înlocuiri, în wp_postmeta şi wp_options. Am folosit o interogare precum:

[SQL]UPDATE wp_postmeta
SET meta_value=REPLACE(meta_value,”domeniu1.cnet.ro”,”domeniu2.cnet.ro”);[/SQL]

sau generic:

[SQL]UPDATE tabelacuceva
SET ceva=REPLACE(ceva,’valoare veche’,’valoare noua’);[/SQL]

Succes!


Apreciază articolul:

1 stea2 stea3 stea4 stea5 stea (2 evaluări, media: 5,00 din 5)
Loading...Loading...

1 comentariu

  1. dorin spune:

    Felicitari pentru articol ! Sper ca vom citi mai multe astfel de articole legate de SQL.


Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile necesare sunt marcate *