use*_*291 3 performance laravel eloquent
我正在尝试查询大量数据(40K 记录),并计划在未来查询更大的数据集。Eloquent 似乎需要很长时间来加载这些数据。我想知道是否有更快的方法来处理这些数据。我试图查看我的数据的有效性,因此检查所有字段是否为空。
我使用过常规的 Eloquent 调用。我不认为分块数据是合适的,因为我不打算以任何方式修改数据。我在争论是否经常运行一项工作并调用这项工作的结果可能是一种更好的方法。
$journal = Journal::where('issn', $this->issn)->first();
$collection = $journal->outputs;
$collectionUnique = $collection->unique('doi');
$collectionDupes = $collection->diff($collectionUnique);
dd('Total Articles '.$this->getTotal(), 'Total Articles '.count($collection));
Run Code Online (Sandbox Code Playgroud)
只需使用查询生成器!
原因如下:
Query Builder比 Eloquent快得多:
比较(雄辩与查询生成器):
为一个简单的表插入 1000 行 Eloquent 需要 1.2 秒,在这种情况下,DB Facades 只需要 800 毫秒(ms)。
另一个比较:
Eloquent ORM 平均响应时间
Joins | Average (ms)
------+-------------
1 | 162,2
3 | 1002,7
4 | 1540,0
Result of select operation average response time for Eloquent ORM
Run Code Online (Sandbox Code Playgroud)
原始 SQL 平均响应时间
Joins | Average (ms)
------+-------------
1 | 116,4
3 | 130,6
4 | 155,2
Result of select operation average response time for Raw SQL
Run Code Online (Sandbox Code Playgroud)
编辑:
您的代码应该是:
$journal = DB::table('journals')->where('issn', $this->issn)->first();
Run Code Online (Sandbox Code Playgroud)
然后对于使用集合(简单的方法):
$journal = Collection::make($journal); //For use Collection Methods
$collection = $journal->get("outputs");//Changed
$collectionUnique = $collection->unique('doi');
$collectionDupes = $collection->diff($collectionUnique);
dd('Total Articles '.$this->getTotal(), 'Total Articles '.count($collection));
Run Code Online (Sandbox Code Playgroud)
最棒的表演 :
使用查询和查询生成器而不是集合。因为 SQL 中的操作通常更快。
请比较您上次代码和此代码的时间,请在评论中告诉我:)
| 归档时间: |
|
| 查看次数: |
3696 次 |
| 最近记录: |