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

Si PostgreSQL count(*) est toujours lent, comment paginer des requêtes complexes ?

Avez-vous lu le titre de cet article ?

Notez que l'article suivant s'applique uniquement aux versions de PostgreSQL antérieures à 9.2. Les analyses d'index uniquement sont désormais implémentées.

Utilisez 9.2 et vous obtiendrez généralement de bien meilleurs résultats. Lisez la page wiki des analyses d'index uniquement pour plus de détails.

Cela dit, sur les anciennes versions utilisant LIMIT et OFFSET fonctionne généralement bien. Vous pouvez estimer le nombre de lignes (et donc le nombre de pages) à l'aide des statistiques du tableau si cela ne vous dérange pas un peu de variation. Voir "Estimation du nombre de lignes" dans l'article auquel vous avez déjà lié.

Pagination en utilisant LIMIT et OFFSET est, IMO, un anti-modèle de toute façon. La plupart du temps, vous pouvez reformuler votre code de pagination afin qu'il utilise sort_column > 'last_seen_value' LIMIT 100 , c'est-à-dire qu'il évite le décalage. Cela peut parfois entraîner des gains de performances très importants.