2016-11-21 14 views
2

データベースのサイズが大きくなるにつれて、次のエラーが発生しました。数百万行のこのテーブルでは約4GBです。大きなテーブルのクエリに関する問題

Laravel cantは大きなテーブルを処理できますか?

$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)を集計としてdataから)

答えて

0

私はテーブルが非常に大きく、終了するまでに時間がかかると思います。別の巨大なクエリを直接実行しています。その後、完全に実行するには長い時間が必要です。私はあなたが最初に終了するときに2番目のクエリを再実行する必要があると思います。

これを試してください:

$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が許す限り実行使用することになりますそれを使用するには

問題が発生した場合は教えてください。

+0

いいえ、同じエラーです。 – CodeGuru

関連する問題