SQL Server优化:在WHERE子句之前或之后计算的SELECT函数?

时间:2011-10-27 18:04:22

标签: sql-server optimization

我只是想知道在SQL Server中是否在这样的语句中:

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

它会为表中的所有行调用someFunction,还是会调用一次?

谢谢!

5 个答案:

答案 0 :(得分:3)

将为每行结果调用

答案 1 :(得分:1)

调用次数取决于结果行,即,如果查询100行的输出将被调用100次,而不是表中的所有行

但是如果它在where子句中,它将针对每一行进行评估

答案 2 :(得分:0)

将为每一行调用它,但由于您选择了一个特定的(或者看起来似乎如此),它将在您的示例中调用一次。

答案 3 :(得分:0)

正如vlad评论你应该试试看看。当然有两种选择:

  1. 一旦知道IdentifierID将始终为1000,它就可以调用它。
  2. 但这可能不是正确的事......

    1. 它可以为每一行调用它 - 也许该函数有副作用?
    2. 我强烈怀疑#2。

答案 4 :(得分:0)

符合标准的SQL服务器应该出现,就像它们在应用SELECT子句之前应用WHERE子句一样。因此,对于满足WHERE A.IdentifierID = 1000的每一行,它应该出现以最多评估一次该函数。

但数据库引擎可以随意优化,只要它们能够为您提供标准所需的相同结果。因此,在您的情况下,由于您选择了一个ID号,因此可能只需要对该函数进行一次评估。