PostgreSQLのGEQO機能に沿った機能を実装する必要があります。GEQOのアプローチはクエリプランを整数文字列としてエンコードすることであり、GEQOはこれらの可能な結合シーケンスをランダムに生成することを理解しています。ソース:http : //www.postgresql.org/docs/9.3/static/geqo-pg-intro.html
私の質問:正しい結合シーケンスを明確に知っている場合にGEQO関数を変更し、異なる結合シーケンスを検索する必要がないようにする方法。たとえば、4つの関係を結合する最適な方法が4-1-3-2であることがわかっていれば、他の順列をチェックする必要はありません。
GEQOがPostgreSQLにどのように実装されているかについての良い資料はありません。PostgreSQLはGEQO機能の全体像のみを提供しますが、あまり説明しません。
または、GEQOを使用せずにstandard_join_search()自体でこの機能を実現できますか?
3
クエリヒントを実装したいようです。これはすべて順調ですが、プロジェクトコミュニティはクエリヒントの大ファンとは言えないため、PostgreSQLコアで変更が受け入れられることを期待しないでください。これについて真剣に考えている場合は、クエリプランナーコードをかなり読む必要があり、パーサーからリライタを介してプランナにヒントを渡す方法を理解する必要があります。ここには簡単な答えはありません。最終的には、プランナー/オプティマイザーで特定のパスを強制的に選択します。
—
クレイグリンガー
ああ、そうです、彼らはクエリヒントについて懐疑的です。プランナーコードの読み取りを完了しました。GEQOは既存のコアへの変更を最小限に抑える方法になると思われます。
—
user2761431 14年
これは、クエリヒントを実装して結合順序を強制するために達成しようとしていることですか?その場合、他の誰かが既にそれを実装しているかどうかを調べてください。また、なぜそれが必要なのか、最初に計画者が間違った選択をしている理由も考慮する必要があります。自己完結型のテストケースを作成し、pgsql-performanceに報告することを検討してください。
—
クレイグリンガー
pg_hint_plan:en.sourceforge.jp/projects/pghintplanがありますが、私は使用しませんでした。あるdbaは、9.2で動作していると言った。それについてのロシア語の記事もありますhabrahabr.ru/post/169751
—
ckorzhik 14