Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon 雄辩和原始SQL查询之间的性能差异是什么


雄辩和原始SQL查询之间的性能差异是什么


与直接执行RAW SQL相比,Laravel雄辩的ORM和RAW SQL查询之间的性能差异很大,主要源于雄辩的抽象和处理开销。

雄辩的性能开销

雄辩提供了一个对象关联映射层,该图层将数据库记录转换为PHP对象。这种抽象增加了便利性和可读性,但引入了几种性能成本:

- 增加的CPU和内存使用量:雄辩实例化了检索或操纵的每个数据库记录的对象,该对象比直接在没有对象转换的数据行上运行的原始SQL会消耗更多的内存和CPU资源。[3] [6]。

- 执行时间较慢:由于其他处理,雄辩的查询通常需要更长的时间才能执行。这在批量操作中尤其明显,例如插入或更新数千个记录,其中雄辩的高架累积了[3] [6]。

- 复杂的查询生成:对于涉及多个表连接的操作,雄辩通常会生成多个SQL查询或复杂的查询,而这些查询或复杂的查询比单个精心制作的RAW SQL JON JOIN查询不那么优化。这会导致多个连接的选择操作中执行时间更长[3]。

RAW SQL优势

RAW SQL查询绕过ORM层,将直接SQL命令发送到数据库。这导致:

- 更快的执行速度:RAW SQL查询执行更快,因为它们避免了对象创建和翻译层的开销。性能测试显示RAW SQL在插入,更新和选择操作中的表现优于雄辩,随着数据量或查询复杂性的增长,时间差异增加[3] [6]。

- 更适合散装和复杂操作:RAW SQL对于批量插入/更新和涉及多个加入的复杂查询更有效,因为它可以精确控制查询结构和优化[3] [6]。

何时使用每个

- 雄辩的ORM:最适合具有相对简单的CRUD操作和较小数据集的中小型应用程序。它增强了开发人员的生产率,代码可读性,可维护性和安全功能,因此当原始性能并不重要时,它是理想的[3] [6]。

-RAW SQL:首选用于关键绩效应用程序,用于处理大量数据,批量操作或执行速度最重要的复杂查询。在这些情况下,RAW SQL提供了更多的控制和效率[3] [6]。

概括

尽管雄辩的Orm提供了重要的开发便利性,但与RAW SQL查询相比,它会造成可衡量的性能罚款。在大规模数据操作和复杂查询中,区别最为明显。 RAW SQL执行更快,使用更少的资源,但需要更多的手动查询管理。它们之间的选择取决于应用程序的绩效要求和开发优先级[3] [6]。

引用:
[1] https://www.reddit.com/r/laravel/comments/hezv6m/eloquent_vs_query_builder_vs_vs_sql_performance_test/
[2] https://laravel.io/forum/04-23-2014-eloquent-vs-vs-raw-sql-sql-sql-which-is-is-serly-better
[3] https://www.diva-portal.org/smash/get/diva2:1014983/fulltext02
[4] https://stackoverflow.com/questions/14570568/speed-comparison-between--eloquent-eloquent-orm-query-builder-builder-builder-and-builder-and-raw-sql-squies
[5] https://www.youtube.com/watch?v=n_rbsojfcau
[6] https://blog.livares.com/comparison-of-performance-betnewne--eloquent-and-and-raw-query/
[7] https://dev.to/hesamrad/laravel-orm-vs-query-builder-vs-vs-sql-speed-test-4knf
[8] https://stackoverflow.com/questions/38391710/what-are-the-key-differences-bet-laravels-eloquent-eloquent-orm-and-and-query-buernder