• Përshëndetje Vizitor!

    Nëse ju shfaqet ky mesazh do të thotë se ju nuk jeni regjistruar akoma. Edhe pse nuk jeni regjistruar ju arrini të shihni pjesën me të madhe të seksioneve dhe diskutimeve të forumit, por akoma nuk gëzoni të drejten për të marrë pjesë në to dhe në avantazhet e të qënurit anëtar i këtij komuniteti. Ju lutem : REGJISTROHUNI që të dërgoni postime dhe mesazhe në Forum-Al.

    Regjistrohu !

10 Këshilla për MySQL

Forum-Al

Aty ku shqiptarët mblidhen
Anëtar
Jan 5, 2010
Postime
560
Pikët
28
Vendndodhja
Forum
MySQL është databaza jonë e preferuar open-source e si rrjedhim është zgjidhja direkte për çdo aplikacion web (apo jo!) që krijojmë. Thjeshtësia dhe filozofia në krijimin e saj (pra është open-source) e bën praktikisht të pandashme nga PHP, që ndan të njëjtat tipare. Megjithatë, janë gjërat e vogla që i neglizhojmë apo thjeshtë nuk i dimë që na krijojnë probleme. Më poshtë ju kam paraqitur 10 këshilla për të optimizuar databazën e për të punuar në mënyrë më efikase me to. Hidhini një sy, fiksjoni, lexoni manualin e MySQL dhe eksperimentoni.

1. Mos ruani të dhëna binare

Kam vënë re shpesh programues që zgjedhin ti ruajnë skedarët (foto, dokumenta, etj) në databazë si të dhëna binare. Vërtetë kjo mundësi egziston, por në praktikë do të ishte një zgjidhje vërtetë e keqe. Mos i shtoni ngarkesë serverit dhe faqes tuaj, thjeshtë ruajini skedarët në server dhe aksesojini ashtu si keni bërë gjithmonë. I vetmi rast ku ruajtja si binarë ka disi kuptim është nëse doni të ruani lidhjen e skedarëve me një përdorues, produkt, apo diçka tjetër. Megjithatë, edhe kjo mund të arrihet shumë lehtë duke shtuar një tabelë tjetër të ilustruar më poshtë.

id – skedari – perdoruesi_id (reference e fushes “id” ne tabelen “perdoruesit”)
—————————-
1 – foto1.jpg – 10
2 – dokument.pdf – 15


2. Mos e lini MySQL pa fjalëkalim

Pas instalimit, MySQL nuk vendos fjalëkalim për përdoruesin kryesor (root). Të jeni të sigurtë që kjo do jetë gjëja e parë që një sulmues do provojë për të përfituar akses në serverin tuaj MySQL. Vendoseni fjalëkalimin duke përdorur komandën më poshtë:

Windows
shell> mysql -u root
mysql> SET PASSWORD FOR ‘root’@'localhost’ = PASSWORD(‘fjalekalimiri’);
mysql> SET PASSWORD FOR ‘root’@'%’ = PASSWORD(‘fjalekalimiri’);


Unix
shell> mysql -u root
mysql> SET PASSWORD FOR ‘root’@'localhost’ = PASSWORD(‘fjalekalimiri’);
mysql> SET PASSWORD FOR ‘root’@'host_name’ = PASSWORD(‘fjalekalimiri’);


3. Normalizoni tabelat

Kjo është ndoshta këshilla më e vlefshme që mund t’ju jap, duke qenë se ju ndihmon ti ruani të dhënat më lehtë, por gjithashtu për të optimizuar databazën. Normalizimi në MySQL është metoda e ndarjes së informacioneve në tabela të ndryshme të cilat referencojnë njëra tjetrën. Ok, nuk e di sa kuptim pati fjalia e fundit, por më lejoni t’ju jap 2 shembuj.

Tabelë e pa normalizuar

id – emri – produkti
——————–
1 – Beni – celular
2 – Beni – kamera
3 – Beni – laptop
4 – Tani – televizor
5 – Tani – radio


Tabela të normalizuara

(Tabela “perdoruesit”) id – emri
——————————–
1 – Beni
2 – Tani


(Tabela “produktet”) id – titulli
———————————
1 – celular
2 – kamera
3 – laptop
4 – televizor
5 – radio


(Tabela “produkte_blera” id – perdorues_id – produkt_id
——————————————————-
1 – 1 – 1
2 – 1 – 2
3 – 1 – 3
4 – 2 – 4
5 – 2 – 5


Në pamje të parë, jam i sigurt që po pyesni veten pse është me efikase të përdor 3 tabela kur mund të përdor vetëm një. Pyetje e drejtë! Në rastin e parë, përfitimi i një liste emrash dhe produktesh do ishte i bezdisshëm dhe i mundur vetëm përmes DISTINCT dhe GROUP BY; editimi ose fshirja e një emri apo produkti përfshin editimin ose fshirjen e të gjithë rreshtave në lidhje me atë emër apo produkt. Tani imagjinoni një rast praktik, ku do t’ju duheshin më shumë të dhëna si për përdoruesit (mbiemri, email, etj), ashtu edhe për produktet (përshkrim, foto, etj); tërësisht jo praktike. Ndërsa në rastin e tabelave të normalizuara, kemi tabela të veçanta për produktet dhe emrat, dhe një ekstra për produktet e blera. Fushat “perdorues_id” dhe “produkt_id” në tabelën “produktet_blera” janë referenca (FOREIGN KEYS) respektivisht për fushën “id” në tabelën “perdoruesit” dhe fushën “id” për tabelën “produktet”.

4. Përdorni LIMIT 1 kur merrni vetëm një rezultat

Nëse bëni query të cilat jeni të sigurtë që do kthejnë vetëm një rezultat, ateherë shtoni LIMIT 1 në fund. Në këtë mënyrë MySQL e përfundon kërkimin atëherë kur gjen 1 rezultat, pa skanuar të gjitha rreshtat. Është diçka e vogël, por mund të bëhet e dukshme për query të shumta në tabela të mëdha.

5. Përdorni INDEX dhe FULLTEXT

Praktika standarte e programuesve është ta indeksojnë si PRIMARY id-në dhe kjo është gjë e mirë sepse optimizon tabelën. Megjithatë, jo të gjithë e dinë që indeksimi mund ti optimizojë kërkimet edhe për fushat e tjera. Në varësi të aplikacioneve që kodoni, veçoni fushat ku kërkoni më tepër dhe bëjini ato INDEX. Përfitimi në shpejtësi në tabela të mëdha është i konsiderueshëm.

Ndërsa INDEX-i funksionon shumë mirë në informacione dhe kërkime të shkurtra, për kërkime në tekste të gjata nuk përfitoni asgjë. Këtu vjen në ndihmë aftësia FULLTEXT e MySQL e cila është krijuar për të kërkuar në vëllime të mëdha informacioni duke ruajtur optimizimin në mendje. Përveç të tjerave, me FULLTEXT mund të krijoni motorë kërkimi të plotë për faqet tuaja të cilët përdorin booleans (AND, OR, NOT) dhe i rendisin logjikisht rezultatet.

6. Mos rendisni me RAND()

Të them të drejtën edhe unë në fillim isha kënaqur me RAND() e me thjeshtësinë që mund të përfitoja rezultate të rastësishme. Megjithatë, kjo ndryshoi pasi lexova plot këshilla optimizimi ku thuhej qartë se ngarkesa që MySQL merr e bën RAND() praktikisht të pa përdorshme. Ajo çfarë RAND() bën në një mjedis real është se merr të gjitha rreshtat e tabelës, i rendit në një mënyrë të çrregullt dhe në fund kthen 1 (apo më shumë) rezultate. Besoj se e imagjinoni ngarkesën e shtuar, por për fat të mirë mund ta replikojmë RAND() pa shumë telashe.

Përdorimi i RAND()

Alternativa më e mirë

Ky rast është shembulli konkret që tregon se pak nuk është e barabartë me mirë.

7. Mos përdorni NULL

Personalisht nuk i kam përdorur ndonjëherë (edhe pa ditur anët negative) sepse thjeshtë nuk më kanë hyrë në punë. Duke e lënë një fushë bosh (apo 0 për numra), praktikisht kam një vlerë e cila është e njëjtë me NULL. Jam i sigurt që edhe shumë të tjerë kanë të njëjtën praktikë, por ata që e përdorin duhet të dinë se NULL zë hapësirë ekstra e cila është totalisht e pa nevojshme dhe e evitueshme.

8. SELECT * është për dembelë

Mendoj se është e qartë për këdo se duke përdorur SELECT * zgjidhni të gjitha kolonat në një tabelë (përfshi ato që s’duhen) dhe si rrjedhim shtoni ngarkesën. Përveç rasteve ku ndërtoni query për të testuar, gjithmonë shmangeni përdorimin e SELECT *.

Kod i keq

Kod i mirë

9. Kuptojini query-t me EXPLAIN

EXPLAIN është një fjalë kyçe e cila ju jep informacione për planin e egzekutimit të query-t që keni krijuar. Përmes saj, do merrni informacione si çelësat e prekuar, cilat tabela janë lidhur (JOIN) dhe në çfarë renditjeje, numrin e rreshtave, etj. Përdoreni në një query të ndërlikuar dhe shihni rezultatet.

EXPLAIN SELECT p.emri, pr.titulli FROM perdoruesit AS pINNER JOIN produktet AS pr ON (pr.perdoruesi_id = p.id)10. Beni query që nuk çaktivizojnë Query Cache

Nëse e keni aktivizuar Query Cache (që duhet ta keni aktivizuar!), atëherë e dini se MySQL i ruan query-t që egzekutohen shpesh në cache dhe i servir ato direkt pa patur nevojë të ri-kërkojë nëpër tabela. Megjithatë, duke përdorur funksione si CURDATE(), CURTIME(), NOW(), RAND(), etj, MySQL e çaktivizon Query Cache meqë rezultatet e kthyera janë gjithmonë të ndryshme. Si alternativë, mund të përdorni funksionet e PHP për të marrë datën, orën, etj, dhe të përdorni vlerën e kthyer ne një query.

Shpresoj t’ju kem dhënë disa këshilla të mira e të vlefshme për të përmirësuar sado pak aplikacionet tuaja. Fusha e optimizimit është e madhe e çdo ditë prodhohen teknika të reja, prandaj nëse keni një këshillë për të shtuar, mos hezitoni.

Mësim të mbarë.

10 Këshilla për MySQL është një postim nga: Feniksi.Com - Thesari i Njohurive



Forum-Al.com
Aty ku shqiptarët mblidhen!
 
Top