加快口才查询

时间:2019-05-25 18:58:53

标签: laravel performance eloquent

我正在尝试查询大量数据(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));

1 个答案:

答案 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
  

有关更多信息:Laravel Eloquent vs Query Builder


已编辑:

您的代码应为:

$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中的运算通常更快。

请比较您的上一个代码和该代码的时间,并在评论中告诉我:)