Maison >développement back-end >tutoriel php >Comment récupérer efficacement le nombre total de résultats dans PostgreSQL avant d'appliquer LIMIT ?

Comment récupérer efficacement le nombre total de résultats dans PostgreSQL avant d'appliquer LIMIT ?

DDD
DDDoriginal
2024-12-13 22:48:11696parcourir

How to Efficiently Retrieve Total Result Count in PostgreSQL Before Applying LIMIT?

Approche optimale pour récupérer le nombre de résultats avant de limiter l'application

Dans la pagination de base de données, la détermination du nombre total de pages est cruciale pour le rendu des contrôles de pagination. Cependant, l’exécution de requêtes de comptage et de limite distinctes à cette fin peut s’avérer inefficace. Cet article explore une technique améliorée pour obtenir le nombre de résultats sans appliquer les limites de la base de données.

Fonctions de fenêtre Postgres

PostgreSQL versions 8.4 et ultérieures ont introduit des fonctions de fenêtre, permettant le calcul de fonctions d'agrégation sur des sous-ensembles partitionnés de données. Cela nous permet de déterminer le nombre total et de récupérer le résultat limité 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>;

Cependant, cette méthode peut entraîner une surcharge de performances supplémentaire car elle nécessite de compter toutes les lignes éligibles, ce qui peut avoir un impact sur les performances pour les grandes lignes. tableaux ou valeurs OFFSET proches du nombre total de lignes.

Options alternatives pour le nombre de résultats

Dans les cas où les performances sont un problème, des approches alternatives peuvent être utilisées pour obtenir le nombre final de lignes concernées, indépendamment des applications OFFSET et LIMIT. La comptabilité interne de Postgres suit ces informations, auxquelles certains clients peuvent accéder.

  • PL/pgSQL : récupérez le nombre de lignes après l'exécution d'une commande SQL à l'aide de GET DIAGNOSTICS.
  • PHP : Utilisez la fonction pg_num_rows pour déterminer le nombre de personnes concernées lignes.

Ressources supplémentaires

  • [Calcul du nombre de lignes affectées par les requêtes par lots dans PostgreSQL](https://dba.stackexchange.com/questions/247142/calculate-number-of-rows-affected-by-batch-query-in-postgresql)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn