Відмінності продуктивності між красномовними ORM Laravel та RAW SQL -запитами є значущими і походить насамперед від абстракції та обробки накладних витрат у красномовних порівняно з прямим виконанням RAW SQL.
Виконання накладних витрат у красномовному orm
Красномовний забезпечує об'єкт-реляційне картографування, який переводить записи баз даних у об'єкти PHP. Ця абстракція додає зручності та читабельності, але вводить кілька витрат на продуктивність:
- Збільшене використання процесора та пам'яті: красномовна інстанціє об'єкт для кожного запису чи маніпульованого запису бази даних, який споживає більше ресурсів пам'яті та процесора, ніж RAW SQL, який працює безпосередньо на рядах даних без перетворення об'єктів [3] [6].
- Повільні часи виконання: Через додаткову обробку красномовні запити, як правило, потребують більше часу. Це особливо вимовляється в оптових операціях, таких як вставка або оновлення тисяч записів, де красномовні накладні витрати значно накопичуються [3] [6].
- Складне генерація запитів: Для операцій, що включають кілька таблиць, красномовність часто генерує декілька запитів SQL або складних запитів, які менш оптимізовані, ніж один добре складений запит, що об'єднує SQL. Це призводить до більш тривалого часу виконання в вибраних операціях з декількома приєднаннями [3].
Сирі переваги SQL
Запити RAW SQL обходять шар ORM, надсилаючи прямі команди SQL в базу даних. Це призводить до:
- Швидше виконання: Запити RAW SQL виконуються швидше, оскільки вони уникають накладних витрат об'єктів та перекладних шарів. Тести на продуктивність показують, що RAW SQL перевершує красномовність в вставці, оновленні та вибору операцій, коли різниці в часі збільшуються у міру зростання обсягу даних або складності запитів [3] [6].
- Краще для об'ємних та складних операцій: RAW SQL є більш ефективним для об'ємних вставок/оновлень та складних запитів, що включають декілька з'єднань, оскільки це дозволяє точно контролювати структуру запитів та оптимізацію [3] [6].
Коли користуватися кожним
- красномовна ORM: Найкраще підходить для невеликих та середніх додатків із відносно простими операціями з кривдами та меншими наборами даних. Це підвищує продуктивність розробників, читабельність коду, ремонтопридатність та функції безпеки, що робить його ідеальною, коли сировина не є критичною [3] [6].
- RAW SQL: бажано для критично важливих програм, що стосуються великих обсягів даних, об'ємних операцій або складних запитів, коли швидкість виконання є першорядною. RAW SQL забезпечує більше контролю та ефективності в цих сценаріях [3] [6].
Підсумок
Хоча красномовна ORM пропонує значні зручності для розвитку, він передбачає вимірювану пеню в порівнянні з необробленими запитами SQL. Різниця найбільш помітна у масштабних операціях даних та складних запитах. RAW SQL виконується швидше і використовує менше ресурсів, але вимагає більшого управління вручну запиту. Вибір між ними залежить від вимог щодо ефективності програми та пріоритетів розвитку [3] [6].
Цитати:
[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-elseent-vs-raw-sql-which-is-real-better
[3] https://www.diva-portal.org/smash/get/diva2:1014983/fulltext02
[4] https://stackoverflow.com/questions/14570568/speed-comparison-between-loquent-orm-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/hesamrad/laravel-orm-vs-query-builder-vs-sql-sceed-test-4knf
[8] https://stackoverflow.com/questions/38391710/what-are-the-key-differences-betweend-laravels-eloquent-orm-and-query-builder