sql >> データベース >  >> RDS >> PostgreSQL

プランナーがボラティリティの異なる関数に対して異なる結果を出すのはなぜですか?

    1000行と推定されます

    1000 推定行は、 CREATEFUNCTION

    関数が揮発性であると宣言されると、インライン化されないように要求されるため、 result_rowsのこのデフォルト値 保持します。

    一方、2番目のテストのようにクエリにインライン化されると、関数の本体がクエリに移動され、関数宣言が存在しないかのように行数が推定されます。これにより、2番目のテストで VALUES以降の正確な見積もりが得られます。 条項は直接評価できます。

    プランナーはここで正確に何をしていて、どこでドキュメントを読むことができますか?

    一般に、プランナーの最適化戦略はメインドキュメントでは説明されていません。それらはメーリングリストで議論され、ソースコードのコメントで言及されています。これは幸いなことに(平均的なソースコードと比較して)非常に明確でよく書かれている傾向があります。関数のインライン化の場合、inline_set_returning_functions のコメントを信じています。 および inline_set_returning_function この特定の最適化を推進するルールのほとんどを明らかにします。 (警告:上記のリンクは現在のマスターブランチにあり、いつでも変更またはドリフトする可能性があります)。




    1. MySQL、PostgreSQL、SQLiteで結果を制限する方法

    2. ArrayListをOracleのPreparedStatementにバインドするにはどうすればよいですか?

    3. 「アプリケーション「SQLDeveloper.app」を開くことができません。」を修正しました。

    4. JSON文字列でフィールドを検索するMySQLクエリ