当我们使用 Eloquent 与 SelectRaw 来处理如下场景时,Laravel 如何处理查询:
这样获取数据会更快吗:
$data = Records::where('active', 1)->get();
或者这会更快地获取我的数据吗:
$data = DB::select( DB::raw("SELECT * from records WHERE active ='1'") );
当我们处理5,00,000条左右的大数据时,使用SelectRaw会影响查询处理速度吗?
使用任何 ORM 总会产生一些开销。然而,这几乎总是不是问题。
例如,虽然编写原始 SQL 可能会稍微提高性能,但与最初进行查询的成本相比,它通常相形见绌。与在原始 SQL 中重写 ORM 查询相比,通过缓存响应可以获得更大的性能提升。
ORM 确实会使某些类型的缓慢低效查询更有可能发生,但这可以通过使用像 Clockwork 这样的分析器来识别缓慢或不必要的查询并将其重构来解决。大多数 ORM 都有工具来处理诸如“N+1 问题”之类的事情 - 例如,Eloquent 有 with()
方法来急切加载相关表,这通常比显式编写查询来执行急切操作要方便得多正在为您加载。
通常更容易表达表之间的关系
重构一个或多个查询以提高效率/删除不必要的查询