SQL Server将如何在幕后执行此查询

SQL Server将如何在幕后执行此查询,sql,sql-server,performance,Sql,Sql Server,Performance,这是我的问题, field1的匹配是快速的,但是myfunc需要很长时间才能返回,我想确保如果field1不匹配,它甚至不会尝试执行myfunc SQL会知道这一点吗?或者我可以在查询中显式地表示它吗 我在MSSQL 2000、2005和2008上,希望有一个共同的答案。在幕后有很多事情要做,以确定如何执行查询,但在这种情况下,我希望它首先在字段1上进行过滤。请注意,这并不是保证——查询优化器有时会做出一些奇怪的选择。此外,您可以通过使用“=”操作符而不是“LIKE”操作符来提高机会。在幕后有很

这是我的问题,

field1的匹配是快速的,但是myfunc需要很长时间才能返回,我想确保如果field1不匹配,它甚至不会尝试执行myfunc

SQL会知道这一点吗?或者我可以在查询中显式地表示它吗


我在MSSQL 2000、2005和2008上,希望有一个共同的答案。

在幕后有很多事情要做,以确定如何执行查询,但在这种情况下,我希望它首先在字段1上进行过滤。请注意,这并不是保证——查询优化器有时会做出一些奇怪的选择。此外,您可以通过使用“=”操作符而不是“LIKE”操作符来提高机会。

在幕后有很多事情要做,以确定如何执行查询,但在这种情况下,我希望它首先在字段1上进行过滤。请注意,这并不是保证——查询优化器有时会做出一些奇怪的选择。此外,您可以通过使用“=”运算符而不是“LIKE”运算符来提高成功率。

mysp
不能是存储过程。它必须是一个用户定义的函数(顺便说一句,您应该用它的模式名限定它)。用户定义的函数被限制为没有副作用,并且应该遵守一些规则。从本质上讲,SQL Server将把查询组合起来,并将其作为单个模块和单个执行计划执行。这不是您可能期望的过程函数调用。SQL描述了要做什么,而不是如何做,查询优化器将生成一个响应完整查询的计划,而不是单独响应查询的每个部分。视图也是如此。

mysp
不能是存储过程。它必须是一个用户定义的函数(顺便说一句,您应该用它的模式名限定它)。用户定义的函数被限制为没有副作用,并且应该遵守一些规则。从本质上讲,SQL Server将把查询组合起来,并将其作为单个模块和单个执行计划执行。这不是您可能期望的过程函数调用。SQL描述了要做什么,而不是如何做,查询优化器将生成一个响应完整查询的计划,而不是单独响应查询的每个部分。视图也是如此。

在SQLServerManagementStudio(2008年和我想2005年)中,您可以告诉它显示执行计划。在查询窗口中按Control-M。然后执行查询。这将向您展示细节。

在SQLServerManagementStudio(2008年和我认为2005年)中,您可以告诉它向您展示执行计划。在查询窗口中按Control-M。然后执行查询。这将向您显示详细信息。

要强制执行条件求值的顺序,请使用以下方法,因为有文件记录,案例保留条件求值的顺序

SELECT 
    *
FROM 
    myTable
WHERE 
    field1 LIKE 'match0' AND
    myfunc(t1.hardwareConfig) LIKE 'match1'

下面的文章对此进行了详细的解释:

要强制执行条件求值的顺序,请使用以下方法,因为有文件证明案例保留了条件求值的顺序

SELECT 
    *
FROM 
    myTable
WHERE 
    field1 LIKE 'match0' AND
    myfunc(t1.hardwareConfig) LIKE 'match1'

下面的文章对此进行了详细的解释:

myfunc
只是一个复杂的计算,还是返回值经常变化。我想知道的是,如果它不经常更改,而且这是一个经常执行的查询,那么让一个后插入触发器计算值并将其作为一个单独的列存储在表中可能是更好的设计。这样,您就不必担心事物的评估顺序。查询甚至可能运行得更快,尤其是如果两列上都有索引。

myfunc
只是一个复杂的计算,或者返回值经常更改。我想知道的是,如果它不经常更改,而且这是一个经常执行的查询,那么让一个后插入触发器计算值并将其作为一个单独的列存储在表中可能是更好的设计。这样,您就不必担心事物的评估顺序。查询甚至可能运行得更快,特别是如果两列都有索引。

什么是mysp?它不可能是存储过程,因为您不能这样使用它们。呃,我指的是函数,而不是存储过程。请看一下除了最佳答案之外的其他答案。答案很可能是你不必担心:SQL会帮你解决的。什么是mysp?它不可能是存储过程,因为您不能这样使用它们。呃,我指的是函数,而不是存储过程。请看一下除了最佳答案之外的其他答案。答案很可能是您不必担心它:SQL会帮您找到答案。