Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Laravel 加快雄辩的查询速度_Laravel_Performance_Eloquent - Fatal编程技术网

Laravel 加快雄辩的查询速度

Laravel 加快雄辩的查询速度,laravel,performance,eloquent,Laravel,Performance,Eloquent,我正在尝试查询大量数据(40K条记录),并计划在将来查询更大的数据集。雄辩似乎需要很长时间才能加载此数据。我想知道是否有更快的方法来处理这些数据。我试图查看数据的有效性,因此检查所有字段是否为空 我经常打有说服力的电话。我不认为分块数据是合适的,因为我不打算以任何方式修改数据。我一直在争论是否每隔一段时间就运行一次作业,并调用该作业的结果可能是一种更好的方法 $journal=journal::where('issn',$this->issn)->first(); $collection=$jo

我正在尝试查询大量数据(40K条记录),并计划在将来查询更大的数据集。雄辩似乎需要很长时间才能加载此数据。我想知道是否有更快的方法来处理这些数据。我试图查看数据的有效性,因此检查所有字段是否为空

我经常打有说服力的电话。我不认为分块数据是合适的,因为我不打算以任何方式修改数据。我一直在争论是否每隔一段时间就运行一次作业,并调用该作业的结果可能是一种更好的方法

$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));

只需使用查询生成器

为什么我们应该对大量记录使用查询生成器而不是雄辩?! 原因如下:

查询生成器的速度比雄辩的更快:

比较(雄辩与查询生成器):

为一个简单的表插入1000行需要1.2秒,在这种情况下,DB facades只需要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
 Joins | Average (ms) 
------+-------------
1     | 116,4 
3     | 130,6 
4     | 155,2 

Result of select operation average response time for Raw SQL
原始SQL平均响应时间

Joins | Average (ms) 
------+-------------
1     | 162,2 
3     | 1002,7 
4     | 1540,0 

Result of select operation average response time for Eloquent ORM
 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();

然后使用集合(简单方式):

最佳性能:

使用查询和查询生成器而不是集合。因为SQL中的操作通常更快


请比较上一个代码和此代码的时间,并在注释中告诉我:)

您的表是否设置了索引和外键?我最近遇到了类似的问题,然后发现,我的表中缺少索引,因此请求花费了很长时间。我有索引和外键。您能否避免使用Eloquent并使用query builder实现unique()和diff()?我无法使用此命令运行$journal->outputs(它会引发错误)。如果我试图以原始SQL查询的形式在输出表上搜索journal_id来运行它,则需要很长时间。转储集合速度很快,我相信是集合上独特的/diff方法减慢了它的速度。是的,很抱歉我错过了,Eloquent刚刚有Eloquent collection,我现在就编辑它;)