2017-12-27 24 views
1

Ich habe eine große Postgres-Tabelle (150 GB +), die eine große Korrelationsmatrix zwischen zwei Variablen Val1 und Val2 speichert. Zum Beispiel:Abfragen einer großen Postgres-Korrelationstabelle

val1 | val2 | distance 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
    0 | 1 |  10 
    0 | 2 |  21 
    0 | 3 |  13 
    1 | 2 |  65 
    1 | 3 |  43 
    2 | 3 |  56 

Das Paar (val1, val2) ist der zusammengesetzte Primärschlüssel für die Tabelle. Ich finde, dass, wenn ich die Abfrage unten ausführe, die Abfrage in unter 35ms ausgeführt wird.

SELECT * 
FROM sliding_window_distances 
WHERE (val1 = 10000) 

Aber wenn ich mit val2 zu suchen, ist es nicht heraus ausführen und Zeiten.

SELECT * 
FROM sliding_window_distances 
WHERE (val2 = 10000) 

Idealerweise möchte ich die Abfrage unten laufen, so dass ich alle Datensätze für den spezifischen Wert (10000 in meinem Beispiel)

SELECT * 
FROM sliding_window_distances 
WHERE (val1 = 10000) 
OR (val2 = 10000) 

Ich bin nicht sicher, wie die Abfrage zu beschleunigen .

+0

Fügen Sie eine zusätzliche UNIQUE-Einschränkung auf (val2, val1). (Dies wird einen Index erstellen) – wildplasser

Antwort

1

Möglicherweise müssen Sie die veralteten Cachedaten bereinigen, bevor Sie andere Aktionen ausführen, die zu einem Timeout führen.

Erste Art:

VACUUM ANALYZE sliding_window_distances; 

auch Sie Sekundärindizes in der Tabelle verwendet werden soll. Erstellen Sie einen Index dramatisch beschleunigen die Abfragevorgänge.

Um einen Index zu erstellen, ohne aus Verriegelungs schreibt an den Tisch:

CREATE INDEX CONCURRENTLY windows_dist_index ON sliding_window_distances (val2); 

Sie können auch zusätzliche definieren UNIQUE Einschränkung wie unten:

ALTER TABLE sliding_window_distances ADD UNIQUE (val2, val1); 

PostgreSQL Documentation on Indexes

+0

Hallo GökcanD, Thanks..Creating den Index scheint zu Timeout ... der Tisch ist sehr groß. – kPow989

+0

@ kPow989 Gibt es Fehlerprotokolle, die wir sehen können? Versuchen Sie auch die "Vakuum" -Lösung. – gokcand

+0

Danke..der zusammengesetzte Schlüssel (val1, val2) ist bereits einzigartig ... Ich bekomme nur eine Zeitüberschreitung beim Erstellen des Indexes..Ich habe gelesen, dass sie auch Stunden dauern könnte, um richtig zu vervollständigen? – kPow989

Verwandte Themen