Autor Zpráva
stepanka
Profil *
Ahoj,

nevíte někdo o nějakých pokročilých technikách, jak optimalizovat SQL dotazy? Všechny základní úkony už jsme provedli:

1) Na vybíraných sloupcích jsou indexy.
2) Nikde není "SELECT * FROM", vždy vybírám konkrétní sloupce.
3) Pokud je možný LIMIT, používám ho.
4) U vyhledávání není BOOLEAN MODE.
5) Nepoužívám proměnné, např.: NOW(), ale přímo datum kvůli cachování.
6) Tabulky jsou správně pospojované přes JOIN.
atd.

Jenže dat je v tabulkách opravdu hodně, řádově tisíce článků a zpráv a některé dotazy trvají kolem 2s. Někde jsem zaslechla, že existují nějaké pokročijlejší techniky, jak zátěž na server snížit.
Nevíte někdo o nějakých? Alespoň zdroj, nebo jiné nápady.

Moc děkuju!
ShiraNai7
Profil
No minimálně můžeš zkusit EXPLAIN na daný dotaz a tak zjistit, jak se s dotazem databáze vypořádá.
EXPLAIN SELECT ... FROM ... a tak dále
Kajman
Profil
stepanka:
1) Na vybíraných sloupcích jsou indexy.

Indexy jsou důležitější na sloupcích, podle kterých se filtruje, seskupuje nebo řadí.

Obecně můžete dotaz ladit postupným přidáváním dalších sloupců či tabulek a zaměřit se na skokové zvýšení zátěže. Prostě najít to místo, co trvá nejdéle. Také je občas rychlejší použít joiny místo in (select ....).

Ale určitě se dá konktrétněji poradit jen s explainem a celým dlouhotrvajícím dotazem (nejlépe i s rozepsáním indexů u tabulek, se kterými pracuje).
stepanka
Profil *
Moc děkuju za rady, ten EXPLAIN si zkusím nastudovat. Kdyby někoho napadlo ještě něco, budu ráda.

Díky moc.
Kajman
Profil
Také záleží na nastavení stroje a sql serveru. Komplexní pojednání Vám sem těžko někdo napíše. Rozsah problematiky je tedy spíše knižní než pro krátký příspěvek do diskuze. Možná si zkuste vypůjčit v knihovně něco, co se tím (alespoň okrajově) zaobírá.

http://books.google.cz/books/about/MySQL.html?id=O0rBaS3oj_0C&redir_esc=y
http://books.google.cz/books?id=BL0NNoFPuAQC&hl=cs&source=gbs_similarbooks
stepanka
Profil *
Kajman:
Děkuju i za tuhle reakci, vím, že je to složitá a obsáhlá problematika a nad nějakou knížkou popřemýšlím. Díky.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: