ホームページ > データベース > mysql チュートリアル > PostgreSQL テーブル関数からの結果を効率的に順序付けして制限するにはどうすればよいですか?

PostgreSQL テーブル関数からの結果を効率的に順序付けして制限するにはどうすればよいですか?

Barbara Streisand
リリース: 2025-01-05 02:33:40
オリジナル
658 人が閲覧しました

How to Efficiently Order and Limit Results from a PostgreSQL Table Function?

テーブル関数における PostgreSQL のパラメータ化された順序付けと制限

質問:

を使用する場合、結果を効率的に順序付けおよび制限するにはどうすればよいですかgetStuff のような SQL テーブル関数ですか?関数外での順序付けや制限、またはplpgsqlを使用することを検討しています。もっと良いアプローチはありますか?

答え:

最初の外観にもかかわらず、plpgsql 関数は、より複雑なシナリオを処理するための推奨オプションです。パフォーマンスが低下する可能性があるのは、plpgsql 関数がネストされている場合のみであり、クエリ プランナーが外側のクエリのコンテキスト内でコードを完全に最適化できません。

過剰な CASE を回避する簡素化された plpgsql 関数句:

CREATE OR REPLACE FUNCTION get_stuff(_param text, _orderby text, _limit int)
  RETURNS SETOF stuff AS
$func$
BEGIN
   RETURN QUERY EXECUTE '
      SELECT *
      FROM   stuff
      WHERE  col = 
      ORDER  BY ' || quote_ident(_orderby) || ' ASC
      LIMIT  '
   USING _param, _limit;
END
$func$  LANGUAGE plpgsql;
ログイン後にコピー

使用法:

SELECT * FROM get_stuff('hello', 'col2', 100);
ログイン後にコピー

注:

  • RETURN QUERY EXECUTE を使用して、クエリ結果を 1 回で返す操作。
  • quote_ident() を使用して識別子が SQLi 耐性があることを確認します。
  • USING を使用してパラメータ値を渡し、キャストや SQLi を防ぎます。
  • パラメータと列の間の名前の競合を回避します。 names.
  • 最初に編集した関数は、親を返しますが、SETOF のものを返すように宣言されているため、失敗します。代わりに RETURNS TABLE の使用を検討してください。

以上がPostgreSQL テーブル関数からの結果を効率的に順序付けして制限するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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