当我们将Eloquent vs SelectRaw用于以下场景时,Laravel如何处理查询:
这会更快地获取数据:
$data = Records::where('active', 1)->get();
或者这会更快地获取我的数据:
$data = DB::select( DB::raw("SELECT * from records WHERE active ='1'") );
当我们处理大约5,00,000条记录的大数据时,使用SelectRaw会影响查询处理速度吗?
答案 0 :(得分:2)
使用任何ORM总会有一些开销。但是,这几乎总是一个问题。
例如,尽管编写原始SQL可能会略微提高性能,但它通常与首先进行查询的成本相比相形见绌。通过缓存响应,您可以通过在原始SQL中重写ORM查询来获得远远更大的性能提升。
ORM确实更有可能使某些类型的低效低效查询成为可能,但这可以通过使用Clockwork之类的分析器来识别慢速或不必要的查询并重构它们。大多数ORM都有工具来处理像the N+1 problem这样的事情 - 例如,Eloquent有with()
方法来急切加载相关的表,这通常比显式编写查询要方便得多。为你做急切的负担。
使用ORM还为开发人员带来了显着的好处:
如果您在Web应用程序中查询速度较慢,那么将其重写为原始查询可能是您应该考虑的最后一件事:
将所有查询编写为原始查询是一种微观优化 - 为了获得不那么多的回报而付出了很多工作,并且考虑到开发人员的时间比服务器时间要贵得多,它几乎没有价值麻烦。即使您有一个单一的,极其可怕的查询或一组具有巨大开销的查询,也有更好的方法来处理它 - 在这种情况下,我倾向于在迁移中创建存储过程并调用它而不是直接进行查询。