Při používání raw SQL v Laravelu je třeba mít na paměti několik aspektů výkonu:
1. Raw SQL vs. výmluvné ORM
Raw SQL může být rychlejší než Eloquent ORM pro složité dotazy, zejména při práci s velkými datovými sadami. Je to proto, že Eloquent ORM generuje SQL dotazy dynamicky, což může vést k nižšímu výkonu ve srovnání s nezpracovanými SQL dotazy, které jsou optimalizovány pro konkrétní databázové operace[4].
2. Indexování
Správné indexování databázových tabulek může výrazně zlepšit výkon dotazů. To je zvláště důležité při použití nezpracovaného SQL, protože vám umožňuje určit konkrétní indexy, které se mají použít ve vašich dotazech. Eloquent ORM také podporuje indexování, ale nemusí vždy používat nejúčinnější indexy[1].
3. Optimalizace dotazů
Nezpracované dotazy SQL lze optimalizovat ručně, aby se zlepšil výkon. To zahrnuje techniky, jako je použití indexů, omezení počtu vybraných sloupců a vyhnutí se zbytečným spojením. Eloquent ORM také podporuje optimalizaci dotazů, ale nemusí vždy používat nejúčinnější metody[2].
4. Připojení k databázi
Výkon může ovlivnit také použité připojení k databázi. Například použití databáze MySQL s vysoce výkonným úložištěm, jako je InnoDB, může zlepšit výkon dotazů ve srovnání s používáním pomalejšího úložiště, jako je MyISAM[1].
5. Využití paměti
Nezpracované dotazy SQL mohou spotřebovat více paměti než dotazy Eloquent ORM, zejména při práci s velkými datovými sadami. Důvodem je, že nezpracované SQL dotazy často vyžadují více paměti pro uložení výsledků dotazu. Výmluvné ORM na druhou stranu využívá méně paměti tím, že získává pouze potřebná data[2].
6. Zabezpečení
Nezpracované dotazy SQL mohou představovat bezpečnostní rizika, pokud nejsou řádně dezinfikovány. Důvodem je, že nezpracované dotazy SQL mohou být zranitelné vůči útokům SQL injection. Výmluvné ORM na druhé straně poskytuje vestavěné bezpečnostní prvky, které takovým útokům zabrání[3].
7. Ladění
Nezpracované SQL dotazy může být obtížnější ladit než výmluvné ORM dotazy. Důvodem je, že nezpracované dotazy SQL neposkytují stejnou úroveň ladicích informací jako dotazy Eloquent ORM. Výmluvné ORM poskytuje podrobné informace o provedených dotazech, což usnadňuje identifikaci a opravu problémů s výkonem[2].
8. Čitelnost kódu
Nezpracované dotazy SQL mohou způsobit, že kód bude méně čitelný, zejména u složitých dotazů. Výmluvné ORM na druhé straně poskytuje čitelnější a udržitelnější způsob psaní dotazů pomocí plynulého rozhraní[3].
9. Kompatibilita databáze
Nezpracované dotazy SQL mohou být méně agnostické k databázi než dotazy Eloquent ORM. Důvodem je to, že nezpracované SQL dotazy jsou specifické pro používanou databázi, zatímco dotazy Eloquent ORM lze použít v různých databázích s minimálními úpravami[4].
10. Monitorování výkonu
Nezpracované dotazy SQL mohou být obtížnější monitorovat problémy s výkonem. Důvodem je, že nezpracované dotazy SQL neposkytují stejnou úroveň informací o sledování výkonu jako dotazy výmluvné ORM. Výmluvné ORM poskytuje podrobné informace o provedených dotazech, což usnadňuje identifikaci a opravu problémů s výkonem[2].
Stručně řečeno, nezpracované SQL dotazy mohou být rychlejší a efektivnější než Eloquent ORM dotazy pro složité dotazy, ale také představují bezpečnostní rizika a může být obtížnější je ladit a udržovat.
Citace:[1] https://deliciousbrains.com/optimizing-laravel-database-indexing-performance/
[2] https://dev.to/jringeisen/laravel-performance-boost-3h4i
[3] https://laravel.io/forum/04-23-2014-eloquent-vs-raw-sql-which-is-really-better
[4] http://www.diva-portal.org/smash/get/diva2:1014983/FULLTEXT02
[5] https://stackoverflow.com/questions/47138952/laravel-eloquent-vs-selectraw-how-does-it-effect-on-query-performance