私はちょうどこのようなステートメントでは、SQL Serverで場合は疑問に思っていた:
SELECT A.Field1, dbo.someFunction(A.IdentifierID) As Field FROM Table A WHERE A.IdentifierID = 1000
テーブル内のすべての行に対してsomeFunctionを呼び出すか、それを一度呼び出すか?
ありがとう!
結果のすべての行に対して呼び出されます
呼び出しの数は結果の行に依存します。つまり、クエリ100の行の出力が表のすべての行ではなく100回呼び出される場合
where節にあった場合は、行ごとに評価されます
vladがコメントしたように、あなたはそれを試してみるべきです。もちろん、2つのオプションがあります:
しかしそれは正しいことではないかもしれません...
私は強く#2を疑う。
それはすべての行で呼び出されますが、特定のものを選択しているので、あなたの例では一度呼び出されます。
準拠しているSQLサーバは、SELECT句を適用する前にWHERE句を適用したように表示されます。したがって、 WHERE A.IdentifierID = 1000 を満たす行ごとに最大でも1回だけ関数を評価する表示する必要があります。
WHERE A.IdentifierID = 1000
しかし、データベースエンジンは、標準が要求するのと同じ結果をもたらす限り、自由に最適化できます。あなたのケースでは、単一のID番号を選択しているので、関数を一度評価するだけでよいでしょう。