2016-11-21 46 views
2

随着数据库大小的增加,开始出现以下错误。这张桌子有数百万行,现在大约有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:select count(distinct data)as data

回答

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

而最好的解决方案将使用EXECUTE AS Laravel允许也可以使用它

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

+0

不,同样的错误。 – CodeGuru