2011-08-05 40 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