Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Jaké jsou rozdíly v výkonu mezi výmluvnými a surovými dotazy SQL


Jaké jsou rozdíly v výkonu mezi výmluvnými a surovými dotazy SQL


Rozdíly v oblasti výkonu mezi výmluvným ORM Laravelem a surovými dotazy SQL jsou významné a pramení především z režie abstrakce a zpracování výmluvnou ve srovnání s přímým provedením surového SQL.

režie výkonu ve výmluvném ormu

Eloquent poskytuje vrstvu mapování objektů, která překládá databázové záznamy do objektů PHP. Tato abstrakce zvyšuje pohodlí a čitelnost, ale představuje několik nákladů na výkon:

- Zvýšené využití CPU a paměti: Eloquent instantuje objekt pro každý načtený nebo manipulovaný záznam databáze, který spotřebovává více zdrojů paměti a CPU než RAW SQL, který pracuje přímo na datových řádcích bez převodu objektu [3] [6].

- pomalejší doby provádění: Vzhledem k dalšímu zpracování, výmluvné dotazy obecně trvají déle, než se provádí. To je zejména výrazné při hromadných operacích, jako je vkládání nebo aktualizace tisíců záznamů, kde se výrazně hromadí režijní náklady [3] [6].

- Komplexní generování dotazů: Pro operace zahrnující více spojů stolů Eloquent často generuje více dotazů SQL nebo komplexních dotazů, které jsou méně optimalizované než jediný dobře vytvořený dotaz SQL Join. To vede k delším časům provádění ve vybraných operacích s více spojením [3].

RAW SQL Výhody

Dotazy RAW SQL obcházejí vrstvu ORM a odesílají příkazy přímých SQL do databáze. Výsledkem je:

- Rychlejší provádění: Dotazy SQL SQL se provádějí rychleji, protože se vyhýbají režii vytváření objektů a překladatelských vrstev. Testy výkonu ukazují, že RAW SQL překonává výmluvné v inzerci, aktualizaci a výběru operací, s časovými rozdíly, jak roste objem dat nebo složitost dotazu [3] [6].

- Lepší pro objemové a komplexní operace: Raw SQL je efektivnější pro hromadné vložky/aktualizace a komplexní dotazy zahrnující více spojení, protože umožňuje přesnou kontrolu nad strukturou a optimalizací dotazů [3] [6].

Kdy použít každý

- Eloquent ORM: Nejvhodnější pro malé a střední aplikace s relativně jednoduchými operacemi CRUD a menšími soubory dat. Zvyšuje produktivitu vývojáře, čitelnost kódu, udržovatelnost a bezpečnostní prvky, což je ideální, pokud není RAW výkon kritický [3] [6].

- RAW SQL: Preferované pro kritické aplikace pro výkon zabývající se velkými objemy dat, objemových operací nebo složitých dotazů, kde je rychlost provádění prvořadá. Raw SQL poskytuje větší kontrolu a efektivitu v těchto scénářích [3] [6].

Shrnutí

Zatímco Eloquent ORM nabízí významné vývojové vymoženosti, vyvolává měřitelnou trest výkonu ve srovnání se surovými dotazy SQL. Rozdíl je nejpozoruhodnější u rozsáhlých datových operací a komplexních dotazů. Raw SQL provádí rychleji a používá méně zdrojů, ale vyžaduje více správy manuálních dotazů. Výběr mezi nimi závisí na požadavcích na výkon a vývojové priority [3] [6].

Citace:
[1] https://www.reddit.com/r/laravel/comments/hezv6m/eloquent_vs_query_builder_vs_sql_performance_test/
[2] https://laravel.io/forum/04-23-2014-eloquent-vs-raw-sql-which-is-really-better
[3] https://www.diva-portal.org/smash/get/diva2:1014983/fullText02
[4] https://stackoverflow.com/questions/14570568/speed-comparison-between-eloquent-om-query-builder-and-raw-sql-queries
[5] https://www.youtube.com/watch?v=n_rbsojfcau
[6] https://blog.livares.com/comparison-of-Performance-between-eloquent-and-raw-query/
[7] https://dev.to/hesrad/laravel-orm-vs-query-builder-vs-sql-speed-test-4knf
[8] https://stackoverflow.com/questions/38391710/what-are-the-key-difference-between-laravels-eloquent-orm-and-query-builder