随着数据库大小的增长,出现以下错误。现在这个表大约有4GB,有数百万行。
Laravel无法处理大桌子?
$count = DB::table('table1')->distinct('data')->count(["data"]);
$count2 = DB::table('table2')->distinct('data')->count(["data"]);
SQLSTATE [HY000]:常规错误:2014在其他未缓冲的查询处于活动状态时无法执行查询。考虑使用PDOStatement :: fetchAll()。或者,如果您的代码只是针对mysql运行,则可以通过设置PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY属性来启用查询缓冲。 (SQL:选择count(distinct data
)作为data
)
答案 0 :(得分:0)
我认为桌子非常大,需要一些时间才能完成。您正在运行另一个巨大的查询,之后还需要很长时间才能完全执行。我认为你需要在第一次完成时重新运行第二个查询。
请试试这个:
$count = DB::table('table1')->distinct('data')->count(["data"]);
if($count){
$count2 = DB::table('table2')->distinct('data')->count(["data"]);
}
但是首先需要查询结果。
尝试使用:
if($count>-1)
或
if(DB::table('table1')->distinct('data')->count(["data"]) >-1){
$count2 = DB::table('table2')->distinct('data')->count(["data"]);
}
对于MySQL语句,这可能会更快:
DB::table('table1')->select(DB::raw("SELECT COUNT (DISTINCT data)"))->count();
最好的解决方案是使用执行,因为Laravel也允许使用它
如果您遇到任何问题,请告诉我。