SQL Server最適化:WHERE句の前または後にSELECTで計算される関数

私はちょうどこのようなステートメントでは、SQL Serverで場合は疑問に思っていた:

SELECT A.Field1, dbo.someFunction(A.IdentifierID) As Field 
FROM Table A WHERE A.IdentifierID = 1000

テーブル内のすべての行に対してsomeFunctionを呼び出すか、それを一度呼び出すか?

ありがとう!

0
それを試して、どちらが速いかを見てください!
追加された 著者 vlad,

5 答え

結果のすべての行に対して呼び出されます

3
追加された

呼び出しの数は結果の行に依存します。つまり、クエリ100の行の出力が表のすべての行ではなく100回呼び出される場合

where節にあった場合は、行ごとに評価されます

1
追加された

vladがコメントしたように、あなたはそれを試してみるべきです。もちろん、2つのオプションがあります:

  1. IdentifierIDが常に1000であることを知っていれば一度だけ呼び出すことができます。

しかしそれは正しいことではないかもしれません...

  1. 行ごとに呼び出すことができます。おそらく関数に副作用がありますか?

私は強く#2を疑う。

0
追加された

それはすべての行で呼び出されますが、特定のものを選択しているので、あなたの例では一度呼び出されます。

0
追加された

準拠しているSQLサーバは、SELECT句を適用する前にWHERE句を適用したように表示されます。したがって、 WHERE A.IdentifierID = 1000 を満たす行ごとに最大でも1回だけ関数を評価する表示する必要があります。

しかし、データベースエンジンは、標準が要求するのと同じ結果をもたらす限り、自由に最適化できます。あなたのケースでは、単一のID番号を選択しているので、関数を一度評価するだけでよいでしょう。

0
追加された