mysql - 查询大表的问题

标签 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: 从 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/

相关文章:

mysql - 如何使用 Laravel 的 Eloquent 实现单表继承?

laravel - 如何在 Laravel 5.3 中进行动态查询?

php - 如何在 Laravel 的 Handler 渲染中捕获授权错误

php - MySQL 未使用准备更新

php - 同时插入多行

mysql - 如果为 null (MySQL 5.5),则自动递增非 PK 列

php - 以正确的顺序在保存时更新 Laravel Eloquent 增变器值

javascript - Uncaught ReferenceError : moment is not defined while using moment in laravel with vue js

php - Laravel 页面重新加载后如何保持所选值选择?

PHP 更新没有任何反应