我正在尝试查询大量数据(4万条记录),并计划将来查询更大的数据集。口才似乎要花费很长时间才能加载此数据。我想知道是否有更快的方法来处理这些数据。我试图查看数据的有效性,因此检查所有字段是否为空。
我经常使用雄辩的电话。我认为对数据进行分块是不合适的,因为我不打算以任何方式修改数据。我在辩论是否经常执行某项工作并称其结果为更好的方法。
$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));
答案 0 :(得分:3)
只需使用查询生成器!
这是原因:
Query Builder比Eloquent快快:
比较(雄辩的vs查询生成器):
要为一个简单的表插入1000行,Eloquent需要1.2秒,在这种情况下,DB Facade仅需要800毫秒(ms)。
另一个比较:
ORM的平均响应时间
Joins | Average (ms)
------+-------------
1 | 162,2
3 | 1002,7
4 | 1540,0
Result of select operation average response time for Eloquent ORM
原始SQL平均响应时间
Joins | Average (ms)
------+-------------
1 | 116,4
3 | 130,6
4 | 155,2
Result of select operation average response time for Raw SQL
已编辑:
您的代码应为:
$journal = DB::table('journals')->where('issn', $this->issn)->first();
然后使用Collection(简单方法):
$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));
最佳表现:
使用查询和 Query Builder 代替集合。因为SQL中的运算通常更快。
请比较您的上一个代码和该代码的时间,并在评论中告诉我:)