Wir hatten ein ähnliches Problem bei großen Anfragen. Häufig wurden Abfragen stundenlang ausgeführt (bis zu 7-8), abhängig von der Belastung der Datenbank für 400 Millionen Zeilen. Unser Ziel war es jedoch, Gruppenergebnisse wie Select Col1, Col2, Col3, Count (1), Count (verschiedene Col4) aus der Tabellengruppe um 1,2,3 zu erzielen.
Das zugrunde liegende Problem ist jedoch dasselbe wie bei Ihnen, da DB in beiden Fällen die Ergebnisse intern sortiert (ordnet).
- So erstellen Sie einen Sortierindex. Auf der MySQL-Website heißt es: "Der Thread verarbeitet ein SELECT, das mithilfe einer internen temporären Tabelle aufgelöst wird." Nach meinem Verständnis des Algorithmus teilt das System Daten höchstwahrscheinlich in Blöcke auf, liest diese Blöcke einzeln von der Festplatte, sortiert einzelne Blöcke, legt sie auf temporären Speicherplatz zurück und so weiter. Das System führt dies für alle Chunks aus und führt schließlich eine Zusammenführungssortierung durch. Dies beinhaltet umfangreiche Lese- / Schreibvorgänge.
Eine mögliche Lösung kann darin bestehen, den Arbeitsspeicher für die Datenbank zu erhöhen (damit größere Blöcke erstellt werden, die im Arbeitsspeicher verbleiben können). Wenn Sie an einer anderen Stelle über einen größeren Arbeitsspeicher verfügen, können Sie die Lösung durch Streaming aus der Datenbank programmieren. Dies kann in kürzester Zeit erreicht werden.
Programmatisch konnte ich die Zeit von durchschnittlich 2 Stunden auf konstant 7,5 Minuten reduzieren.
added
der Tat einen Standardindex.