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 :
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;
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!