查询大表的问题

时间:2016-11-21 04:50:26

标签: mysql laravel laravel-5

随着数据库大小的增长,出现以下错误。现在这个表大约有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

的聚合

1 个答案:

答案 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也允许使用它

如果您遇到任何问题,请告诉我。