Maison > base de données > tutoriel mysql > Comment puis-je appeler efficacement une fonction de retour d'ensemble plusieurs fois avec des arguments de tableau dans PostgreSQL ?

Comment puis-je appeler efficacement une fonction de retour d'ensemble plusieurs fois avec des arguments de tableau dans PostgreSQL ?

Mary-Kate Olsen
Libérer: 2024-12-30 07:35:18
original
487 Les gens l'ont consulté

How Can I Efficiently Call a Set-Returning Function Multiple Times with Array Arguments in PostgreSQL?

Appeler une fonction de retour d'ensemble avec un argument de tableau plusieurs fois

Dans PostgreSQL, vous pouvez rencontrer une situation où vous devez appeler une fonction de retour d'ensemble plusieurs fois , en fournissant à chaque fois un tableau comme argument. Cependant, lorsque vous utilisez la méthode traditionnelle consistant à transmettre un seul tableau à la fonction, la fonction peut être appelée plusieurs fois, ce qui entraîne un traitement inefficace.

Pour résoudre ce problème, PostgreSQL 9.3 et versions ultérieures proposent LEFT JOIN LATERAL . .. SUR la vraie syntaxe. Cette approche optimise l'exécution en effectuant les étapes suivantes :

  1. L'instruction LEFT JOIN LATERAL joint les données d'une sous-requête aux résultats de l'appel de la fonction de retour d'ensemble, foo(sub.arr).
  2. La clause ON true garantit que toutes les lignes de la sous-requête sont incluses dans le résultat, que la fonction renvoie ou non des lignes. rows.

Pour illustrer cette approche, considérons l'exemple suivant :

SELECT sub.dataid, f.*
FROM  (
   SELECT dataid, array_agg(data) AS arr
   FROM   dataset
   WHERE  dataid = something
   GROUP  BY 1
   ) sub
LEFT   JOIN LATERAL foo(sub.arr) f ON true;
Copier après la connexion

Dans cet exemple, la sous-requête agrège la colonne de données pour chaque dataid, créant ainsi un tableau. Ce tableau est ensuite passé en argument à la fonction foo(), qui renvoie un ensemble de lignes de données améliorées.

Alternativement, si la fonction foo() ne peut potentiellement renvoyer aucune ligne et que vous souhaitez conserver toutes les lignes à gauche de la jointure, vous pouvez utiliser la syntaxe CROSS JOIN LATERAL ou abrégée.

En utilisant cette approche, vous pouvez invoquer efficacement une fonction renvoyant un ensemble plusieurs fois avec un tableau arguments, évitant les appels de fonction inutiles.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal