2

行ごとにユーザー定義関数を事前計算しようとしています。アイデアは、フィールドの1つにJSONオブジェクトをテキストオブジェクトとして持っていて、そこから他の「フィールド」を解析したいということです。これは、他の真のフィールドと同じようにクエリで返すことができます。ただし、JSON の解析のオーバーヘッドは重要です。クエリを高速化する方法でこの解析関数を事前計算する方法はありますか?

そもそもデータベースにテキストとして JSON があってはならないという主張は控えてください。私は長所と短所を知っています。

4

2 に答える 2

2

まず、PostgreSQL 9.2 の今後のJSON データ型に興味があるかもしれません(まもなくリリースされます)。

あなたの質問に関しては、具体化されたビュー(または、より単純な形式: テーブル内の冗長な事前計算された列) を探しています。「Materialized View」は単なる確立された用語であり、PostgreSQL データベースの特別なオブジェクトではありません。基本的に、事前に計算された値を使用して冗長テーブルを作成し、特定のイベントまたはタイムリーに更新します。

用語を検索すると、いくつかの答えが得られます。

于 2012-06-25T16:29:46.760 に答える
1

マテリアライズドビューに加えて、PostgreSQLは関数の出力にもインデックスを付けることができるため、次のようなことができることに注意してください。

CREATE INDEX my_foo_bar_udf_idx ON foo (bar(baz));

これは、UDFが不変としてマークされている場合にのみ機能します。つまり、出力は引数のみに依存します。これにより、クエリ引数に対して関数を実行し、テーブルの代わりにインデックスをスキャンするオプションが提供されます。すべてのユースケースに対応しているわけではありませんが、多くのユースケースに対応しており、多くの場合、ビューを具体化する際の頭痛の種を減らすことができます。

于 2013-03-18T02:03:36.967 に答える