【问题标题】:Issue with Querying Large Table查询大表的问题
【发布时间】:2017-04-04 10:12:08
【问题描述】:

随着我的数据库大小的增长,开始出现以下错误。这张有数百万行的表现在大约有 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 aggregate from data)

【问题讨论】:

    标签: mysql laravel laravel-5


    【解决方案1】:

    我认为这张桌子很大,需要一些时间才能完成。您正在直接运行另一个巨大的查询,之后也需要很长时间才能完全执行。我认为您需要在第一次完成时重新运行第二个查询。

    请试试这个:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-01
      • 2018-03-06
      • 2016-01-29
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多