Autor Zpráva
franklin0-0-7
Profil *
Dobrý večer,
chtěl bych někoho z Vás poprosit, zda by někdo nemohl ukázat, jak co nejlépe optimalizovat sql dotazy.
Například zda jde optimalizovat nějak insert - znám jen klasický INSERT INTO .. (sloupce) VALUES(hodnoty)
Lze to nějak zoptimalizovat? Protože web, pro který to dělám je dosti navštěvovaný - nemohu ho tu zmiňovat, rád bych to zoptimalizoval, protože těch SQL dotazů je zhruba 5000 za den jen do jedné tabulky - za den zhruba 10000 což není málo.
A taktéž bych chtěl vědět, jak co nejlépe zoptimalizovat SELECTy. Znám totiž jen klasiku SELECT x FROM y WHERE z = 0 LIMIT x,y ORDER BY xyz
Velmi si cením veškerých rad od Vás,
pěkný zbytek večera.


+ popřípadně zda není lepší nějaký "mysql framework" nebo jak to nazvat - více asi co myslím, místo tohoto. Prostě jako je dibi, pdo, atd.. Pokud by to bylo lepší, tak zda byste mi nedoporučili tedy nějaký.
bestik_63
Profil
ahoj,
pokud máš 10000 dotazů denně, tak je to přibližně jeden dotaz/8,5 vteřiny, což je pro zátěž serveru tak málo, že bych se tím asi ani nezabýval.
Zrychlit Insert asi nejde, ale třeba má někdo lepší znalosti SQL a vyvede mě z omylu. Příkaz SELECT se nicméně optimalizovat (zrychlit) dá. Stačí když místo * zadáš přesně sloupce, které potřebuješ vypsat. Dále u podmínky WHERE použij konkrétnější omezení dotazu (teda pokud to jde). Pokud nemusíš u Selectu omez podmínku aby na výstupu bylo co nejméně dat, které nepotřebuješ a musel bys je v PHP dále filtrovat. Příklad. vypisuješ data z tabulky o 10 sloupcích z tohoto roku a zajímá tě pouze jeden údaj (např. datum). Vypíšeš : SELECT datum from tabulka where datum => "1.1. 2015".
franklin0-0-7
Profil *
bestik_63:
Děkuji moc za rady, to co jsi napsal víceméně znám. Chtěl bych se zeptat, které "rozšíření" pro mysql v php - jako je dibi, PDO, atd, .. je nejrychlejší a nejlepší?
lionel messi
Profil
franklin0-0-7:
Zdravím, pokúsim sa trochu doplniť odpoveď kolegu, ktorá je v zásade veľmi dobrá a ako základné nasmerovanie rozhodne postačí.

Možnosť zrýchliť dotazy sa však neukrýva len v ich samotnom písaní, ale aj v databázovom návrhu. Kľúčom k úspechu sú indexy, ktoré mierne spomaľujú zápis, odmenou však býva dramaticky zrýchlené čítanie. Veľmi stručný úvod do problematiky správnej tvorby indexov ti poskytne napríklad článok Jakuba Vránu: Jak psát kód: Databázové indexy vytvářejte při psaní dotazů.

Na bežne vykonávané dotazy sa môžeš pozrieť pomocou klauzule EXPLAIN (napr. EXPLAIN SELECT x FROM y WHERE z = 0 LIMIT x,y ORDER BY xyz) a podľa výsledku zvážiť napr. pridanie práve zmienených indexov.

Chtěl bych se zeptat, které "rozšíření" pro mysql v php - jako je dibi, PDO, atd, .. je nejrychlejší a nejlepší?
Ohľadne rýchlosti netuším, ohľadne kvality, bezpečnosti a pohodlnosti práce býva odborníkmi pomerne často preferované dibi, ale osobnú skúsenosť s ním nemám (podobne ako ani so žiadnou inou databázovou vrstvou), skúsenejší kolegovia určite budú mať k tejto téme viac čo povedať. :-)
franklin0-0-7
Profil *
lionel messi:
Děkuji moc!
Kajman
Profil
A proč se Vám zdá, že je potřeba něco ze současného stavu optimalizovat? Je nějaký dotaz příliš pomalý?

Pokud se zajímáte obecně a o vše, tak odpověď není na příspěvěk ve fóru, ale na knihu.

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:

0