2016-11-21 4 views
2

Begann mit den folgenden Fehlern, wenn die Größe meiner Datenbank wächst. Es ist jetzt etwa 4 GB für diesen Tisch mit Millionen von Zeilen.Problem mit der Abfrage der großen Tabelle

Laravel kann mit großen Tischen umgehen?

$count = DB::table('table1')->distinct('data')->count(["data"]); 
$count2 = DB::table('table2')->distinct('data')->count(["data"]); 

SQLSTATE [HY000]: Allgemeiner Fehler: 2014 Kann keine Abfragen ausgeführt werden, während andere ungepufferten Abfragen aktiv sind. Erwägen Sie die Verwendung von PDOStatement :: fetchAll(). Alternativ dazu können Sie, wenn Ihr Code nur gegen mysql ausgeführt wird, die Pufferung von Abfragen aktivieren, indem Sie das Attribut PDO :: MYSQL_ATTR_USE_BUFFERED_QUERY festlegen. (SQL: Wählen Sie Anzahl (distinct data) als Aggregat von data)

Antwort

0

Ich denke, die Tabelle ist sehr groß und wird einige Zeit dauern, um zu beenden. Sie führen direkt eine weitere große Abfrage aus, nach der auch eine lange Zeit für die vollständige Ausführung benötigt wird. Ich denke, Sie müssen eine zweite Abfrage erneut ausführen, wenn sie das erste Mal fertig sind.

Bitte versuchen Sie dies:

$count = DB::table('table1')->distinct('data')->count(["data"]); 
if($count){ 
$count2 = DB::table('table2')->distinct('data')->count(["data"]); 
} 

Aber dies wird von der ersten der Abfrage ein Ergebnis benötigen.

Versuchen Sie es mit:

if($count>-1)

oder

if(DB::table('table1')->distinct('data')->count(["data"]) >-1){ 
    $count2 = DB::table('table2')->distinct('data')->count(["data"]); 
} 

Für die Aussage MySQL könnte dies schneller sein:

DB::table('table1')->select(DB::raw("SELECT COUNT (DISTINCT data)"))->count(); 

Und beste Lösung wird unter Verwendung ausführen als Laravel erlauben um es auch zu benutzen

Bitte sagen Sie mir, wenn Sie irgendwelche Probleme haben.

+0

Nein, der gleiche Fehler. – CodeGuru

Verwandte Themen