コンテクスト:
大きなクエリ(疑似)があるとしましょう:
SELECT %boundthing,data
WHERE data in (
...do lots of long-running stuff
)
クエリで使用されていないが、出力を出力したい場合を想定しましょう(これはばかげたユースケースですが、句が実行されるまで必要ないことがboundthing
わかっている点を示しています)。boundthing
WHERE
現状では、選択したプログラミング言語でクエリに値を渡すと、boundthing
後でデータベースによって実際に「使用」されるかどうかに関係なく、クエリを実行したときに評価されます。
質問:
(既存のデータベース/プログラミング言語で)評価するバインドスタイルのものをオンデマンドで設定する方法はありますか(つまり、ソースが変数であるか関数であるかにかかわらず、バインドされた変数の値を生成します)クエリプランが作成されるときではなく、クエリ?
たとえば、アプリケーションの擬似コードでは次のように言うことができます。
function MyFunc:
return "foo" + system.GetEpochTimestamp();
var results = database_handle.Execute( SQL = "
SELECT %boundthing,data
WHERE data in (
...do lots of long-running stuff
)", BINDS = [ ("boundthing", MyFunc ) ]
);
また、出力の「boundthing」の値は、句がすべてをフィルタリングした後のアプリケーションサーバーのタイムスタンプに 対応します(アプリケーションサーバーのランタイムを差し引いたものですが、データがデータベースサーバーに到達するまでにかかった時間はどれくらいですか)。およびデータベースによって処理されます)。WHERE
myfunc
知りたい理由:
好奇心。
このようなものは、クエリプランナーによって提供される効率の多く(おそらくすべて)をおそらく破壊することを私は知っています。クエリで値が必要になったときにバインドの評価が正確に実行されるという保証はありません(値の送信時間、データベースでの処理時間など)。また、多くの原子性の保証に違反しており、中絶や停止の場合に深刻な問題を引き起こす可能性があることも知っています。
それでも、私は興味があります。