PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

Verbesserung der Abfragegeschwindigkeit:einfaches SELECT in einer großen Postgres-Tabelle

Extrahieren meiner Kommentare in eine Antwort:Die Indexsuche hier war sehr schnell - die ganze Zeit wurde damit verbracht, die tatsächlichen Zeilen abzurufen. 23 Sekunden / 7871 Zeilen =2,9 Millisekunden pro Zeile, was angemessen ist, um Daten abzurufen, die über das Festplattensubsystem verstreut sind. Suchvorgänge sind langsam; Sie können a) Ihren Datensatz in RAM einbauen, b) SSDs kaufen oder c) Ihre Daten im Voraus organisieren, um Suchvorgänge zu minimieren.

PostgreSQL 9.2 verfügt über eine Funktion namens Index-Only-Scans, die es ermöglicht, Abfragen (normalerweise) zu beantworten, ohne auf die Tabelle zuzugreifen. Sie können dies mit dem btree kombinieren index-Eigenschaft zum automatischen Beibehalten der Reihenfolge, um diese Abfrage schnell zu machen. Sie erwähnen int1 , int2 , und zwei Floats:

CREATE INDEX sometable_int1_floats_key ON sometable (int1, float1, float2);
CREATE INDEX sometable_int2_floats_key ON sometable (int2, float1, float2);

SELECT float1,float2 FROM sometable WHERE int1=<value>; -- uses int1 index
SELECT float1,float2 FROM sometable WHERE int2=<value>; -- uses int2 index

Beachten Sie auch, dass dies die Festplattensuchen nicht auf magische Weise löscht, sondern sie nur von der Abfragezeit zur Einfügezeit verschiebt. Es kostet Sie auch Speicherplatz, da Sie die Daten duplizieren. Trotzdem ist dies wahrscheinlich der gewünschte Kompromiss.