2011-08-05 43 views

回答

1

是,也不是。

(下面是指专门SQL Server

一些运营商短路,有些则没有。 ORCAN短路,但可能不取决于查询引擎选择的操作顺序。

CASE是(我相信)100%保证短路。

您也可以尝试强制评估以便与嵌套的括号,如:

IF ((X) OR Y)

但我还不能肯定这是始终保持一致要么。

SQL在这方面的麻烦是声明式的,实际的逻辑是由引擎执行的。事实上,从您的示例中首先检查Y可能更有效,然后检查X - 例如,如果Y已编入索引,并且X需要表扫描。

对于参考:

从ANSI-SQL文档from this answer:

当优先级不被格式或通过 括号来确定,表达式的有效的评价通常是 从左侧进行向右。然而,它是依赖于实现 是否表述实际上是从左向右计算的,特别是 当操作数或操作可能导致条件得到提升,或者如果 表达式的结果,而不完全 评估的所有部分确定表达。

+0

案不是SQL,所以我不知道如何应用。 (这是在T - SQL虽然) –

+0

@比利 - 好点,我在答案的开头添加了一个警告。 – JNK

+0

1为文档参考 –

1

专门针对SQL Server的说法 - 排序。

在您指定或声明不能保证短路,因为优化器可以重新排序随意他们,如果感觉较好的性能增益可以通过这样进行排序。

但是,底层引擎本身可能会发生短路。这只是用户无法控制的东西。

下面的文章(该链接到其他优秀的讨论/资源)有更多关于这个话题:http://weblogs.sqlteam.com/jeffs/archive/2008/02/22/sql-server-short-circuit.aspx

+1

这也是出于同样的原因的PostgreSQL [http://www.postgresql.org/docs/9.1/static/sql-expressions.html#SYNTAX-EXPRESS-EVAL]也是如此。 – SingleNegationElimination