Pri používaní surového SQL v Laravel je potrebné mať na pamäti niekoľko aspektov výkonu:
1. Nespracované SQL vs. výrečné ORM
Raw SQL môže byť rýchlejší ako Eloquent ORM pre zložité dotazy, najmä pri práci s veľkými množinami údajov. Je to preto, že Eloquent ORM generuje SQL dotazy dynamicky, čo môže viesť k pomalšiemu výkonu v porovnaní s nespracovanými SQL dotazmi, ktoré sú optimalizované pre špecifické databázové operácie[4].
2. Indexovanie
Správne indexovanie databázových tabuliek môže výrazne zlepšiť výkon dotazov. Toto je obzvlášť dôležité pri používaní surového SQL, pretože vám to umožňuje špecifikovať špecifické indexy, ktoré sa majú použiť vo vašich dotazoch. Eloquent ORM tiež podporuje indexovanie, ale nemusí vždy používať najefektívnejšie indexy[1].
3. Optimalizácia dopytov
Nespracované SQL dotazy je možné optimalizovať manuálne, aby sa zlepšil výkon. To zahŕňa techniky, ako je používanie indexov, obmedzenie počtu vybratých stĺpcov a vyhýbanie sa zbytočným spojeniam. Eloquent ORM podporuje aj optimalizáciu dotazov, no nemusí vždy používať najefektívnejšie metódy[2].
4. Pripojenie k databáze
Výkon môže ovplyvniť aj použité pripojenie k databáze. Napríklad používanie databázy MySQL s vysokovýkonným ukladacím mechanizmom, akým je InnoDB, môže zlepšiť výkon dopytov v porovnaní s používaním pomalšieho ukladacieho mechanizmu, ako je MyISAM[1].
5. Využitie pamäte
Nespracované SQL dotazy môžu spotrebovať viac pamäte ako Eloquent ORM dotazy, najmä pri práci s veľkými množinami údajov. Je to preto, že nespracované SQL dotazy často vyžadujú viac pamäte na uloženie výsledkov dotazu. Eloquent ORM na druhej strane využíva menej pamäte tým, že získava len potrebné dáta[2].
6. Bezpečnosť
Nespracované SQL dotazy môžu predstavovať bezpečnostné riziká, ak nie sú správne dezinfikované. Je to preto, že nespracované SQL dotazy môžu byť zraniteľné voči útokom SQL injection. Eloquent ORM na druhej strane poskytuje vstavané bezpečnostné funkcie, ktoré takýmto útokom zabránia[3].
7. Ladenie
Nespracované SQL dotazy môžu byť ťažšie laditeľné ako Eloquent ORM dotazy. Je to preto, že nespracované SQL dotazy neposkytujú rovnakú úroveň ladiacich informácií ako Eloquent ORM dotazy. Eloquent ORM poskytuje podrobné informácie o vykonaných dotazoch, čo uľahčuje identifikáciu a opravu problémov s výkonom[2].
8. Čitateľnosť kódu
Nespracované SQL dotazy môžu spôsobiť, že kód bude menej čitateľný, najmä pri zložitých dotazoch. Eloquent ORM na druhej strane poskytuje čitateľnejší a udržiavateľnejší spôsob písania dotazov pomocou svojho plynulého rozhrania[3].
9. Kompatibilita databázy
Nespracované SQL dotazy môžu byť menej agnostické k databáze ako Eloquent ORM dotazy. Je to preto, že nespracované SQL dotazy sú špecifické pre používanú databázu, zatiaľ čo dopyty Eloquent ORM možno použiť v rôznych databázach s minimálnymi úpravami[4].
10. Monitorovanie výkonnosti
Nespracované SQL dotazy sa môžu ťažšie monitorovať kvôli problémom s výkonom. Je to preto, že nespracované dotazy SQL neposkytujú rovnakú úroveň informácií o monitorovaní výkonu ako dopyty Eloquent ORM. Eloquent ORM poskytuje podrobné informácie o vykonaných dotazoch, čo uľahčuje identifikáciu a opravu problémov s výkonom[2].
Stručne povedané, nespracované SQL dotazy môžu byť rýchlejšie a efektívnejšie ako Eloquent ORM dotazy pre komplexné dotazy, ale tiež predstavujú bezpečnostné riziká a môžu byť náročnejšie na ladenie a údržbu.
Citácie:[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