Autor | Zpráva | ||
---|---|---|---|
franklin0-0-7 Profil * |
#1 · Zasláno: 4. 7. 2015, 19:41:42 · Upravil/a: franklin0-0-7
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 |
#2 · Zasláno: 4. 7. 2015, 21:41:23
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 * |
#3 · Zasláno: 4. 7. 2015, 21:45:00
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 * |
#5 · Zasláno: 4. 7. 2015, 21:55:21
lionel messi:
Děkuji moc! |
||
Kajman Profil |
#6 · Zasláno: 4. 7. 2015, 21:59:39
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. |
||
Časová prodleva: 10 let
|
0