Wie ich gerade gelesen habe, ist die ALTER TABLE ... ORDER BY ...
-Abfrage ist nützlich, um die Leistung in bestimmten Szenarien zu verbessern. Ich bin überrascht, dass der PK-Index dabei nicht hilft. Aber aus den MySQL-Dokumenten
, scheint InnoDB das zu tun Verwenden Sie den Index. Allerdings ist InnoDB tendenziell langsamer als MyISAM. Das heißt, mit InnoDB müssten Sie die Tabelle nicht neu anordnen, aber Sie würden die blitzschnelle Geschwindigkeit von MyISAM verlieren. Es könnte trotzdem einen Versuch wert sein.
So wie Sie die Probleme erklären, scheint es, dass zu viele Daten in den Speicher geladen werden (vielleicht findet sogar ein Austausch statt?). Sie können dies leicht überprüfen, indem Sie Ihre Speichernutzung überwachen. Schwer zu sagen, da ich MySQL nicht so gut kenne.
Andererseits denke ich, dass Ihr Problem an einer ganz anderen Stelle liegt:Sie verwenden einen Computer mit nur 512 MB RAM als Datenbankserver mit einer Tabelle, die mehr als 4 Millionen Zeilen enthält ... Und Sie führen eine sehr speicherintensive Arbeit durch Operation auf dem ganzen Tisch auf dieser Maschine. Es scheint, dass 512 MB dafür nicht annähernd ausreichen werden.
Ein viel grundlegenderes Problem, das ich hier sehe:Sie führen die Entwicklung (und wahrscheinlich auch das Testen) in einer Umgebung durch, die sich stark von der Produktionsumgebung unterscheidet. Die Art von Problem, das Sie erklären, ist zu erwarten. Ihre Entwicklungsmaschine hat sechsmal so viel Arbeitsspeicher wie Ihre Produktionsmaschine. Ich glaube, ich kann mit Sicherheit sagen, dass der Prozessor auch viel schneller ist. In diesem Fall schlage ich vor, dass Sie eine virtuelle Maschine erstellen, die Ihren Produktionsstandort nachahmt. Auf diese Weise können Sie Ihr Projekt problemlos testen, ohne den Produktionsstandort zu stören.