Autor Zpráva
qteck
Profil
Ahoj,

jak optimalizovat databázi a kdy použít stored procedures?

co si představím je pouze nastavení indexů. optimalizování dotazů aby to nebyly nějaké blbosti. a tedy také stored procedures pro jejich rychlejší zpracování. Co více?

Kdy konkrétně používat store procedures a né obvyklé tvary select nebo jiné dotazy pro db skrze php?

Díky.
Kajman
Profil
qteck:
co si představím je pouze nastavení indexů. optimalizování dotazů

Zda se dotaz provádí dobře, může napovědět jeho rychlost, případně můžete prozkoumat explain.

Dále můžete optimalizovat výkon výběrem databázového systému, nastavením databázového serveru, pouštěním analýz (pokud to db umí) a rychlostí či množstvím hardwaru.

Stored procedury se snažte používat jen tam, kde to neovlivní neblaze rychlost dotazu vůči variantě s klasickým selectem. Těžko radit obecně.
qteck
Profil
jsem někde četl že by se měli stored procedures používat téměř vždy při výpisu.

a to proto, že jsou vždy rychlejší než forma kdy se příkaz zapisuje do php funkce query(..) a teprve se posílá.

procedures se volají query('name()') a už jsou v db předpřipravené, pokud si je předpřipravíš samozřejmě. Ve článcích to nazývají jako zkompilované a proto prý fungují rychleji.

Jak mi pomůže explain při ladění databáze?


Měl jsem interview a docela si mě tímto namazali na prse.
Kajman
Profil
Myslím, že procedury mají význam spíše pro programátory - znovupoužitelnost kódu, abstrakci od struktury tabulek, případně přehlednost. Při změně struktury nebo logiky stačí opravit jediné místo a vše funguje dál.

Pochybuji, že to bude mít měřitelný vliv na výkon. Nejvíce výkonu stojí dolování dat, ne parsování syntaxe. Neznám všechny db systémy, tak si to zkuste na to svém změřit.

Pokud vlastní funkci použijete ve where části, tak může mít naopak neblahý vliv na výkon. Tipuji, že pokud budete mít např. funkci na zjištění aktuální ceny zboží předaného jako parametr a budete hledat zboží s cenou pod 100, tak bude rychlejší klasický sql dotaz, protože může použít vytvořený index nad sloupcem s cenou.

Jak mi pomůže explain při ladění databáze?

Pomáhá odhalit způsob zpracování konkrétní dotazu a tím často i důvod jeho pomalosti.

Měl jsem interview a docela si mě tímto namazali na prse.

Nevím, co jste tím obratem chtěl sdělit, ale obecně nemůžete věřit každému článku na Internetu nebo sdělení v rozhovoru. Poznatky si ověřte na více místech případně si to sám změřte.
juriad
Profil
V několika případech jsem použil procedury z důvodu sjednocení syntaxe dotazů do několika různých databázových systémů. Jinak se definují a používají cursory, jinak se spojují řetězce (funkce CONCAT, +, ||), jinak se definují proměnné. Takto stačí jen zavolat proceduru, jejíž způsob volání je všude stejný.
qteck
Profil
Dobře tedy.

Díky moc za odpovědi.

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: