2016-05-17 4 views
3

キー/値ストアからFDWテーブルのセットを介してデータを公開しています。 Postgresは小さなサブセットしか必要としないときに頻繁にテーブル全体をスキャンすることを余儀なくされる点を除いて、すべてうまく動作します。例えば外部データラッパーのWHERE句の条件へのアクセス

SELECT * FROM人PERSON_ID = 'WLW001';

最後にLIMIT 1を追加しない限り、すべての人物の行を検索します。

私のキー/バリューストアでは、適切なレコードを直接見つけるために、キーの一部として "WLW001"を渡すだけです。

つまり、キー/値ストアにクエリを最適化するために、WHERE句の条件を見つける必要があります。私はFDWの例とドキュメントの多くを見てきましたが、RelOptInfoやscan_clausesリストやヘルパー関数を使ってこの情報を取得する方法は何も見つかりません。

また、SELECTステートメントにパラメーターマーカーが含まれている場合は、マーカーの値を代入する必要があるようです。どこで値を見つけるのですか?

+0

どのキー/バリューストアデータラッパーを使用していますか?一部のデータ・ラッパーは、送信される行数を減らすために、リモート・サーバー上でWHERE条件を処理することができます。ファイルストアのfdwの場合は、ファイル全体を取得して完全にスキャンする可能性があります。 'plperlu'を使って、自分のニーズに合ったロジックでデータを取得する独自のストアドプロシージャを作成することもできます。 –

+0

キー/値ストアは独自のもので、テラバイト単位のデータにアクセスするために使用されます。キーはマルチパートです。ですから、WHERE条件をキーに入れることができれば、興味のあるレコードに直接行くことができます。 –

+0

データストアはどのような形式ですか?どの外部データラッパーを使用していますか? –

答えて

0

mysql_fdwプロジェクト(https://github.com/EnterpriseDB/mysql_fdw)に必要なものがdeparse.cという名前のファイルに見つかりました。 PostgreSQLはクエリを解析し、個々のテーブルクエリに変換します。次に、それぞれ独自のWHERE条件セットを持つ異なるテーブルごとにFDWコールバックを呼び出します。 PostgreSQLのデータ構造内でツリーを歩いて、そのテーブル内で検索している正確な条件を取得することは可能です。

関連する問題