Käytettäessä raaka-SQL:ää Laravelissa on useita suorituskykyyn liittyviä näkökohtia, jotka on pidettävä mielessä:
1. Raw SQL vs. Eloquent ORM
Raw SQL voi olla nopeampi kuin Eloquent ORM monimutkaisille kyselyille, varsinkin kun käsitellään suuria tietojoukkoja. Tämä johtuu siitä, että Eloquent ORM luo SQL-kyselyitä dynaamisesti, mikä voi johtaa hitaampaan suorituskykyyn verrattuna raaka-SQL-kyselyihin, jotka on optimoitu tiettyjä tietokantatoimintoja varten[4].
2. Indeksointi
Tietokantataulukoiden oikea indeksointi voi parantaa merkittävästi kyselyn suorituskykyä. Tämä on erityisen tärkeää käytettäessä raaka-SQL:ää, koska sen avulla voit määrittää tietyt indeksit käytettäväksi kyselyissäsi. Eloquent ORM tukee myös indeksointia, mutta se ei välttämättä aina käytä tehokkaimpia indeksejä[1].
3. Kyselyn optimointi
Raaka-SQL-kyselyt voidaan optimoida manuaalisesti suorituskyvyn parantamiseksi. Tämä sisältää tekniikoita, kuten indeksien käytön, valittujen sarakkeiden määrän rajoittamisen ja tarpeettomien liitosten välttämisen. Eloquent ORM tukee myös kyselyn optimointia, mutta se ei välttämättä aina käytä tehokkaimpia menetelmiä[2].
4. Tietokantayhteys
Myös käytetty tietokantayhteys voi vaikuttaa suorituskykyyn. Esimerkiksi MySQL-tietokannan käyttäminen tehokkaan tallennusmoottorin, kuten InnoDB:n, kanssa voi parantaa kyselyn suorituskykyä verrattuna hitaampaan tallennusmoottoriin, kuten MyISAM[1].
5. Muistin käyttö
Raaka-SQL-kyselyt voivat kuluttaa enemmän muistia kuin kaunopuheiset ORM-kyselyt, varsinkin kun käsitellään suuria tietojoukkoja. Tämä johtuu siitä, että raaka-SQL-kyselyt vaativat usein enemmän muistia kyselytulosten tallentamiseen. Eloquent ORM puolestaan käyttää vähemmän muistia hakemalla vain tarvittavat tiedot[2].
6. Turvallisuus
Raaka-SQL-kyselyt voivat aiheuttaa tietoturvariskejä, jos niitä ei ole desinfioitu kunnolla. Tämä johtuu siitä, että raaka-SQL-kyselyt voivat olla alttiina SQL-injektiohyökkäyksille. Eloquent ORM puolestaan tarjoaa sisäänrakennettuja suojausominaisuuksia tällaisten hyökkäysten estämiseksi[3].
7. Virheenkorjaus
Raaka-SQL-kyselyitä voi olla vaikeampi korjata kuin kaunopuheisia ORM-kyselyjä. Tämä johtuu siitä, että raaka-SQL-kyselyt eivät tarjoa samaa virheenkorjaustietojen tasoa kuin Eloquent ORM -kyselyt. Eloquent ORM tarjoaa yksityiskohtaista tietoa suoritetuista kyselyistä, mikä helpottaa suorituskykyongelmien tunnistamista ja korjaamista[2].
8. Koodin luettavuus
Raaka-SQL-kyselyt voivat tehdä koodista vähemmän luettavan, etenkin monimutkaisissa kyselyissä. Eloquent ORM puolestaan tarjoaa luettavamman ja ylläpidettävämmän tavan kirjoittaa kyselyitä sujuvan käyttöliittymänsä avulla[3].
9. Tietokannan yhteensopivuus
Raaka-SQL-kyselyt voivat olla vähemmän tietokannan agnostisia kuin kaunopuheiset ORM-kyselyt. Tämä johtuu siitä, että raaka-SQL-kyselyt ovat käytössä olevalle tietokannalle ominaisia, kun taas kaunopuheisia ORM-kyselyjä voidaan käyttää eri tietokannoista pienin muutoksin[4].
10. Suorituskyvyn seuranta
Raaka-SQL-kyselyitä voi olla vaikeampi seurata suorituskykyongelmien varalta. Tämä johtuu siitä, että raaka-SQL-kyselyt eivät tarjoa samaa suorituskyvyn seurantatietoa kuin Eloquent ORM -kyselyt. Eloquent ORM tarjoaa yksityiskohtaista tietoa suoritetuista kyselyistä, mikä helpottaa suorituskykyongelmien tunnistamista ja korjaamista[2].
Yhteenvetona voidaan todeta, että raaka-SQL-kyselyt voivat olla nopeampia ja tehokkaampia kuin Eloquent ORM-kyselyt monimutkaisille kyselyille, mutta niihin liittyy myös turvallisuusriskejä ja niitä voi olla vaikeampi korjata ja ylläpitää.
Lainaukset:[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