随着我的数据库大小的增长,开始出现以下错误。这个有数百万行的表现在大约有 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: 从 data
中选择 count(distinct data
) 作为聚合)
最佳答案
我认为表格很大,需要一些时间才能完成。您正在直接运行另一个巨大的查询,之后还需要很长时间才能完全执行。我认为您需要在第一次完成时重新运行第二个查询。
请试试这个:
$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,因为 Laravel 也允许使用它
如果您遇到任何问题,请告诉我。
关于mysql - 查询大表的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40713004/