Mysql hosting

Ako zrýchliť načítavanie webu – 2. časť

Optimalizácia databáz

Najčastejšou príčinou pomalého načítavania stránok býva optimalizácia databázy, zle navrhnuté tabuľky (štruktúra, velkosť, indexy), zle vyskladané query. Pri vytvárani a správe databazy je vždy potrebne mať na pamäti otáku: Ako sa mi bude systém spravať, ak mi dáta narastú na sto tisíc až milion záznamov? Aj tie najhoršie query zbehnú za výborny čas, ak robíme select len cez pár riadkov.

Dátový typ tabuliek

Najčastejšie sa používajú dva typy MyIsam a InnoDB. MyIsam je rýchlejší typ, na druhej strane nie je zaručená konzistentnoť dát. Ďalšou nevýhodou je čas locknutia tabuliek pri updatoch. InnoDB je pomalší engine, na druhej strane sa nám ale stará o konzistentnosť dát a v pripade chyby sa vie vrátiť. Ak ale nepotrebujete výužívať transakcie, odporúčam používať typ MyIsam.

Štruktúta tabuliek

Ak vytvárame nové tabulky, je dobré si ich nakresliť a pospájať si ich vzájomné relácie. Tabulky je potrebné navrhnuť tak, aby neboli zbytočne velké a aby pracovali s čo možno najmenej operáciami. V žiadnom prípade neukladať do tabuliek dáta (obrázky, hudbu, súbory)

Ak už máme živý projekt, veľmi tažko sa nám mení celková štruktúra tabuliek. V takýchto prípadoch môžeme výužiť napríklad pridanie tabulky, ktorá nám zjednoduši počet operácií. Napríklad, ak máme dve tabulky s relaciou n ku m (napr. n produktov a každý produkt ma m kategorií), vytvoríme si referenčnú tabulku, kde vložime každé spojenie produktu a kategórie. Stúpne nám síce  objem dát, ale ušetríme si tým veľké množstvo operácií.

INDEXY  a EXPLAIN

Pre čo najrýchlejšie výhladavanie v tabulkách je potrebné mať správne nastavené indexy. Je to vlastne dátová struktúra, ktorá nám urýchluje vzhľadávanie. Existuje jedno pravidlo, že všetko, čo máme za where by malo mať index. Je dobré sa ho držať, ale treba indexy voliť rozumne, nakolko nie je dobré mat nadefinovaných priveľa indexov.

Rovnako musíme zadefinovať index aj v prípade, že spájame viac tabuliek. JOIN, LEFT JOIN…

Ak si nevieme rady, ako zadefinovať správne index, môžeme použiť príkaz EXPLAIN. Vyskladáme si náš požadovaný select a potom len pred select vložíme EXPLAIN. Tento príkaz nám poskytne výpis existujúcich klúčov, navrhne nové kľúče a vypíše nám aj údaj o tom, koľko riadkov je potrebné prehladať, kým sa dostaneme k výsledku.

V prípade viacerých podmienok za WHERE nám zvýsi rýchlosť zadefinovanie zložených indexov.

CREATE INDEX zlozeny_index on TABLE (stípec1, stípec2) ;

QUERY

Každé query, ktoré voláme by mali spínať nasledovné body:

  • používať INDEXY pri WHERE, JOIN a ORDER
  • používať LIMIT a selectovat len tolko riadkov, koľko naozaj potrebujeme
  • nepoužívať veľké dátové typy BIGINT,..
  • pri JOIN používať rovnaké dátove typy a rovnakej velkosti
  • definovať si, ktoré stípce chceme selectovat, nie select . from…
  • použivat SELECT DISTINCT iba ak je to nutné

vyhladávanie a diakritika

Ak prehladávate veľké textové polia, je rýchlejšie použiť LIKE ako REGEXP. Velké textove pokia sa zvyknú prehladávať full-textovým prehladávaním (MATCH .. AGAINST). Full-text však nedokážu detekovať text ak zadáme bez diakritiky a chceme aby našlo aj s diakritikou. LIKE dokáže najsť zhodu aj v prípadoch, ak zadáme slovo bez diakritiky ak máme data v utf-8 a tabulku mame v kodovaní utf8_general_ci.

Ďalšia možnost, ako optimalizovať vyhladávanie aj s diakritikou je tá, že si upravíme náš text do standardizovanáho tvaru bez diakritiky uložíme si ho do dalšieho stĺpca a prehladávame upravený text.

V ďalšej časti sa pozrieme na to, ako upraviť nastavenia na servery, cache a kompresiu tak, aby mala stránka čo najrýchlejšiu odozvu.

Ak by ste mali otázky, alebo pripomienky k mojmu článku napíšte mi na devel@speedweb.sk

Vlastný webhosting

Vlastný webhosting