Beschleunigung PostgreSQL Abfrage, wo Daten zwischen zwei Datumsangaben
Ich habe eine große Tabelle (> 50m Zeilen), die einige Daten mit einer ID und einem timestamp:
id, timestamp, data1, ..., dataN
...mit einem multi-Spalten-index auf (id, timestamp)
.
Brauche ich zur Abfrage der Tabelle, um alle Zeilen zu wählen, die mit einer bestimmten ID, wo der Zeitstempel wird zwischen zwei Datumsangaben, die ich bin derzeit dabei mit:
SELECT * FROM mytable WHERE id = x AND timestamp BETWEEN y AND z
Diese derzeit dauert über 2 Minuten auf einem high-end Rechner (2x 3 GHz dual-core-Xeons w/HT, 16GB RAM, 2x 1TB-Festplatten im RAID-0 -) und ich möchte wirklich, um ihn zu beschleunigen.
Habe ich gefunden dieser Tipp, die empfiehlt die Verwendung eines räumlichen Indexes, aber das Beispiel gibt es für IP-Adressen. Allerdings, die Geschwindigkeit zu erhöhen (436s, 3s) ist beeindruckend.
Wie kann ich diese mit Zeitstempel?
Dual 3GHz Xeon Dual-cores mit HT, 16GB RAM etc. Die Tabelle (id, timestamp, data) mit einem multi-Spalten-index auf (id, timestamp).
NICHT high-end, mit allen Mitteln.... besonders bei als Sie nicht sagen nichts über die..... Scheiben, die sind der kritische Teil für jeden Datenbank-server. VIEL mor ethan, der CPU, oder der RAM. Was ist Ihre disc-layout?
Es ist ein desktop-PC, der kein server ist, und wird immer nur von einer person verwendet werden, auf einmal. Disc-wise, es hat 2x 1 TB Festplatten im RAID 0.
Ah, hier wir gehen. Mist IO-performance. Typische 1-TB-Laufwerke, dsktop, 7200 U / MIN. Raid 0 macht es ein WENIG besser, aber... naja... doppelt Mist immer noch Mist ist. Ich würde nicht sagen, das ist bis zu einem fast 50.000.000 Zeilen-scan, wenn Sie eine Tabelle Scannen, wird entschieden 😉
InformationsquelleAutor Roger | 2010-03-17
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dieser Tipp eignet sich nur, wenn Sie zwei Spalten A und B und verwenden Sie Abfragen wie:
Nicht:
Mittels index auf
date(column)
eher alscolumn
könnte speed it up a little bit.Es ist geeignet für die Zeit. Aber es ist nur geeignet, wenn die Tabelle die Intervalle (also zwei Spalten) und schauen Sie für einen Wert gibt. Nicht, wenn Sie vergleichen einzelne Spalte in einem Intervall.
Ahhh, ich sehe. Sorry, ich hatte falsch verstanden, die Anwendung.
InformationsquelleAutor Konrad Garus
Konnte Sie ERKLÄREN die Abfrage für uns? Dann wissen wir, wie die Datenbank führt eine Abfrage aus. Und was ist mit der Konfiguration? Was sind die Einstellungen für shared_buffers und work_mem? Und Wann haben Sie (oder Ihr system) der letzten Vakuum und analysieren? Und Letzte Sache, was OS und pgSQL-version verwenden Sie?
Können Sie erstellen, wonderfull Indizes aber ohne die richtigen Einstellungen, wird die Datenbank nicht verwenden können Sie sehr effizient.
InformationsquelleAutor Frank Heikens
Stellen Sie sicher, dass der index TableID+TableTimestamp, und Sie tun eine Abfrage wie:
wenn Sie Funktionen der Tabelle TableTimestamp Spalte in der WHERE-Sie werden nicht in der Lage, vollständig den index verwenden.
wenn Sie bereits all dies tun, dann wird Ihre hardware möglicherweise nicht bis zu der Aufgabe.
wenn Sie mit version 8.2 oder höher, sollten Sie versuchen:
InformationsquelleAutor KM.