2016-11-21 60 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