Basisinformationen: Dies ist im Zusammenhang mit der Indizierung von OpenStreetMap-Daten. Um die Frage zu vereinfachen: Die Kerninformation ist in 3 Haupttypen mit dem Wert "W", "R", "N" (VARCHAR(1)
) unterteilt.Indizierung/Performance-Strategien für große Menge des gleichen Werts
Die Tabelle hat irgendwo ~ 75M Reihen, alle Spalten mit "W" bilden ~ 42M Reihen. Vorhandene Indizes sind für diese Frage nicht relevant.
Jetzt die Frage selbst: Die Indizierung der Daten erfolgt über eine Prozedur. Innerhalb dieser Prozedur gibt es einige Schleifen, die Folgendes tun:
[...] SELECT * FROM Tabelle WHERE the_key = "W"; [...]
Die Ergebnisse werden erneut geloopt und die obige Abfrage befindet sich ebenfalls in einer Schleife. Dies kostet viel Zeit und verlangsamt den Prozess massiv. Ein Indexon the_key
ist offensichtlich nutzlos, da alle Werte, die der Index verwenden könnte, dieselben sind ("W"). Das Skript selbst läuft mit einer Geschwindigkeit, die OK ist, nur die SELECT
dauert sehr lange.
Muss ich
- Notwendigkeit, einen „besonderen“ Art Index zu erstellen, die dies berücksichtigt und macht die
SELECT
schneller? Wenn ja, welcher? - müssen einige der Server-Parameter tunen (sie sind bereits abgestimmt und das Ergebnis, das sie liefern, scheinen gut zu sein. Wenn nötig, kann ich sie posten)?
- müssen mit der Geschwindigkeit leben und einfach mehr Hardware bekommen, um mehr Leistung zu gewinnen (Tim Taylor grunt grunt)?
Irgendwelche Alternativen zu den oben genannten Punkten (außer es neu schreiben oder nicht verwenden)?
Was können Sie noch optimieren? Es kann sein, dass die Langsamkeit von der schieren Menge an Daten stammt, die Sie verarbeiten. z.B. Tun Sie nicht SELECT * FROM Tabelle WHERE the_key = "W" in einer Schleife. – nos