Dans les requêtes de base de données, la détermination du nombre total de résultats avant d'appliquer LIMIT est cruciale pour la pagination. Actuellement, une approche courante consiste à exécuter la requête deux fois : une fois pour compter tous les résultats et une autre fois avec une limite pour récupérer la page souhaitée. Cependant, cette méthode peut s'avérer inefficace.
Heureusement, PostgreSQL 8.4 a introduit une solution plus efficace : les fonctions de fenêtre. En utilisant une fonction de fenêtre, vous pouvez récupérer à la fois le nombre total de résultats et les résultats limités en une seule requête.
SELECT foo , count(*) OVER() AS full_count FROM bar WHERE <some condition> ORDER BY <some col> LIMIT <pagesize> OFFSET <offset>;
Notez que même si cette méthode fournit les informations souhaitées, elle peut être coûteuse en calcul, car tout les lignes doivent être traitées même si elles seront exclues par le LIMIT.
Comprendre la séquence d'événements dans une requête SELECT peut aider à comprendre comment fonctionnent les fonctions des fenêtres. L'ordre des opérations dans Postgres est le suivant :
En plus des fonctions de fenêtre, il existe des méthodes alternatives pour récupérer le nombre de lignes concernées :
Ces méthodes fournissent le nombre de lignes affectées par la requête plutôt que le nombre complet avant l'application LIMIT.
Ressources associées :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!