PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

Amélioration de la vitesse des requêtes :simple SELECT dans une grande table postgres

Extraction de mes commentaires dans une réponse :la recherche d'index ici a été très rapide - tout le temps a été consacré à la récupération des lignes réelles. 23 secondes / 7871 lignes =2,9 millisecondes par ligne, ce qui est raisonnable pour récupérer des données dispersées sur le sous-système de disque. Les recherches sont lentes ; vous pouvez a) adapter votre ensemble de données à la RAM, b) acheter des SSD ou c) organiser vos données à l'avance pour minimiser les recherches.

PostgreSQL 9.2 possède une fonctionnalité appelée analyses d'index uniquement qui lui permet (généralement) de répondre aux requêtes sans accéder à la table. Vous pouvez combiner cela avec le btree index propriété de maintenir automatiquement l'ordre pour rendre cette requête rapide. Vous mentionnez int1 , int2 , et deux flottants :

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

Notez également que cela n'efface pas comme par magie les recherches sur le disque, cela les déplace simplement du moment de la requête au moment de l'insertion. Cela vous coûte également de l'espace de stockage, puisque vous dupliquez les données. Pourtant, c'est probablement le compromis que vous souhaitez.