ホームページ > データベース > mysql チュートリアル > PostgreSQL で配列引数を使用してセットを返す関数を効率的に複数回呼び出すにはどうすればよいですか?

PostgreSQL で配列引数を使用してセットを返す関数を効率的に複数回呼び出すにはどうすればよいですか?

Mary-Kate Olsen
リリース: 2024-12-30 07:35:18
オリジナル
488 人が閲覧しました

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

配列引数を使用して Set を返す関数を複数回呼び出す

PostgreSQL では、Set を返す関数を複数回呼び出す必要がある状況に遭遇することがあります。 、毎回引数として配列を指定します。ただし、単一の配列を関数に渡す従来の方法を使用すると、関数が複数回呼び出され、非効率な処理が発生する可能性があります。

この問題を解決するために、PostgreSQL 9.3 以降では LEFT JOIN LATERAL が提供されています。 .. ON 真の構文。このアプローチでは、次の手順を実行することで実行が最適化されます。

  1. LEFT JOIN LATERAL ステートメントは、サブクエリのデータと、セットを返す関数 foo(sub.arr) の呼び出し結果を結合します。
  2. ON true 句は、関数が何かを返すかどうかに関係なく、サブクエリのすべての行が結果に含まれることを保証します。 rows.

このアプローチを説明するために、次の例を考えてみましょう。

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;
ログイン後にコピー

この例では、サブクエリは各 dataid のデータ列を集計し、配列を作成します。次に、この配列は引数として foo() 関数に渡され、拡張されたデータ行のセットが返されます。

あるいは、foo() 関数が行を返さない可能性があり、すべての行を保持したい場合は、結合の左側では、CROSS JOIN LATERAL または短縮構文を使用できます。

このアプローチを利用すると、効率的に配列引数を使用して関数を複数回返し、不要な関数呼び出しを回避します。

以上がPostgreSQL で配列引数を使用してセットを返す関数を効率的に複数回呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート