Laravel naudojant neapdorotą SQL, reikia atsižvelgti į keletą našumo aspektų:
1. Neapdorotas SQL ir iškalbingas ORM
Neapdorotas SQL gali būti greitesnis nei iškalbingas ORM sudėtingoms užklausoms, ypač kai kalbama apie didelius duomenų rinkinius. Taip yra todėl, kad Eloquent ORM dinamiškai generuoja SQL užklausas, o tai gali lemti lėtesnį našumą, palyginti su neapdorotomis SQL užklausomis, optimizuotomis konkrečioms duomenų bazės operacijoms[4].
2. Indeksavimas
Tinkamas duomenų bazių lentelių indeksavimas gali žymiai pagerinti užklausos našumą. Tai ypač svarbu naudojant neapdorotą SQL, nes tai leidžia nurodyti konkrečius indeksus, kuriuos naudosite užklausose. „Iloquent ORM“ taip pat palaiko indeksavimą, tačiau ne visada gali naudoti efektyviausius indeksus[1].
3. Užklausos optimizavimas
Neapdorotas SQL užklausas galima optimizuoti rankiniu būdu, siekiant pagerinti našumą. Tai apima tokius metodus kaip indeksų naudojimas, pasirinktų stulpelių skaičiaus ribojimas ir nereikalingų sujungimų vengimas. Eloquent ORM taip pat palaiko užklausų optimizavimą, bet ne visada gali naudoti pačius efektyviausius metodus[2].
4. Duomenų bazės ryšys
Naudojamas duomenų bazės ryšys taip pat gali turėti įtakos našumui. Pavyzdžiui, naudojant MySQL duomenų bazę su didelio našumo saugojimo varikliu, pvz., InnoDB, galima pagerinti užklausos našumą, palyginti su lėtesniu saugojimo varikliu, pvz., MyISAM[1].
5. Atminties naudojimas
Neapdorotos SQL užklausos gali užimti daugiau atminties nei iškalbingos ORM užklausos, ypač kai kalbama apie didelius duomenų rinkinius. Taip yra todėl, kad neapdorotoms SQL užklausoms dažnai reikia daugiau atminties, kad būtų išsaugoti užklausos rezultatai. Kita vertus, iškalbingas ORM naudoja mažiau atminties, nes tik nuskaito būtinus duomenis[2].
6. Sauga
Neapdorotos SQL užklausos gali sukelti saugumo pavojų, jei jos nėra tinkamai išvalytos. Taip yra todėl, kad neapdorotos SQL užklausos gali būti pažeidžiamos SQL injekcijos atakoms. Kita vertus, iškalbingas ORM suteikia integruotas saugos funkcijas, kad būtų išvengta tokių atakų[3].
7. Derinimas
Neapdorotas SQL užklausas derinti gali būti sunkiau nei iškalbingas ORM užklausas. Taip yra todėl, kad neapdorotos SQL užklausos nepateikia tokio pat derinimo informacijos kaip iškalbingos ORM užklausos. Iškalbinga ORM suteikia išsamią informaciją apie vykdomas užklausas, todėl lengviau nustatyti ir išspręsti našumo problemas[2].
8. Kodo skaitomumas
Neapdorotos SQL užklausos gali padaryti kodą mažiau įskaitomą, ypač sudėtingų užklausų atveju. Kita vertus, iškalbingas ORM suteikia skaitomesnį ir lengviau prižiūrimą būdą rašyti užklausas naudojant sklandžią sąsają[3].
9. Suderinamumas su duomenų baze
Neapdorotos SQL užklausos gali būti mažiau agnostinės duomenų bazėms nei iškalbingos ORM užklausos. Taip yra todėl, kad neapdorotos SQL užklausos yra būdingos naudojamai duomenų bazei, o iškalbingos ORM užklausos gali būti naudojamos įvairiose duomenų bazėse su minimaliais pakeitimais[4].
10. Veiklos stebėjimas
Neapdorotas SQL užklausas gali būti sunkiau stebėti dėl našumo problemų. Taip yra todėl, kad neapdorotos SQL užklausos nepateikia tokio pat efektyvumo stebėjimo informacijos kaip iškalbingos ORM užklausos. Iškalbinga ORM suteikia išsamią informaciją apie vykdomas užklausas, todėl lengviau nustatyti ir išspręsti našumo problemas[2].
Apibendrinant galima pasakyti, kad neapdorotos SQL užklausos gali būti greitesnės ir efektyvesnės nei iškalbingos ORM užklausos sudėtingoms užklausoms, tačiau jos taip pat kelia pavojų saugumui ir jas gali būti sunkiau derinti ir prižiūrėti.
Citatos:[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