2017-01-26 5 views
0

Ich bekomme einen Fehler erlaubt Speichergröße erschöpft. Ich habe die Abfrage gefunden, die das Problem verursacht hat.PHP erlauben Speichergröße Joining 2 Tabellen

ich beitrete 2 Tische - orderdet und prodtexts

Orderdet enthält Details von Aufträgen 9k Zeilen und prodtexts 500 Zeilen.

Wenn ich die Abfrage über SQL ausführen, habe ich Ergebnis, aber mit der Kenntnis, dass es keine Primärschlüssel festgelegt ist. Wenn ich die Abfrage aktualisiert habe, um nur die Spalten zu wählen, die ich benötigte + 1 primäre Indexspalte enthält, war das Ergebnis in Ordnung. Was kann das Problem verursachen? Soll ich manuell Abfragen schreiben, die Spalten enthalten, die ich brauche? Jetzt verwende ich SELECT *.

+1

Sie liefern nicht genug Details, aber eine Sache, die in den Sinn kommt; Sind Sie sicher, dass die Abfrage das erschöpfte Speicherproblem oder eher die Arbeit an den Ergebnissen verursacht hat? Schlecht geschriebene JOINs können Multiplikation der Ergebnisse verursachen, fügen einige PHP-Code, um die lächerlichen Ergebnisse herauszufiltern – user3802077

+0

Nur daran gedacht Ergebnisse waren gute Nuss jede enthaltene Beschreibung der Produkte - viel HTML so habe ich nur die Spalten neccessery ausgewählt und es hat funktioniert –

Antwort

0

Wenn Sie das Speicherlimit überschreiten, bedeutet dies, dass Sie in Zukunft dasselbe Problem haben werden, selbst wenn Sie das Speicherlimit erhöhen.

Um Speichergrenze

In php.ini Datei memory_limit finden und ändern Sie ihn auf richtigen Wert (z memory_limit = 250G) zu ändern. Skript Seite

Oder von PHP: ini_set('memory_limit', '250MG');


immer Ihre Abfragen optimieren. Nehmen Sie nur das, was Sie brauchen, und versuchen Sie, die Ergebnisgröße so weit wie möglich zu reduzieren.

Tipps:

SELECT id, name statt SELECT *

SELECT [..] FROM a JOIN b ON a.id = b.a_id statt SELECT [..] FROM a, b/SELECT [..] FROM a LEFT JOIN b ON a.id = b.a_id.

SELECT [..] FROM a, b wird (in Ihrem Fall) wählt 9000 * 500 = 4500000 Zeilen.

Vergessen Sie nicht, WHERE .. AND .. zu verwenden, verwenden Sie LIMIT wenn möglich.