0

私はこのようなクエリを持っています:

SELECT a, very_costly_function(b), another_fn(very_costly_function(b)) from X

そして、very_costly_function(b)が2回使用されていることに気付くでしょう。したがって、このような変数を設定できれば、次のようになります。

SET FOR EACH ROW: Z = very_costly_function(b)
SELECT a, Z, another_fn(Z) from X
4

2 に答える 2

1
SELECT a, fn_b, another_fn(fn_b) AS a_fn_b
  FROM (SELECT a, very_costly_function(b) AS fn_b
          FROM x)

これにより、オーバーヘッドを節約できます。値を変数に入れて再度使用することは、コンパイラーにとって少し面倒になる可能性があります。多くの場合、フロントエンドまたは他の上位層のプログラムでそのようなクエリを直接使用することはできません。1つのクエリでうまくいく場合は、それを使用してください。

于 2013-03-19T12:07:00.843 に答える
1

aとvery_costly_function(b)を一時テーブルに挿入します。次に、一時テーブルからa、関数の結果、およびその他の関数(関数の結果)を選択します。

于 2013-03-19T12:01:25.823 に答える