2011-01-19 70 views
2

據我所知,SQL EXISTS檢查是否存在行,但它是否評估整個表達式?因此,舉例來說,會是這樣的:SQL EXISTS性能

IF EXISTS (SELECT TOP 1 1 FROM table WITH (NOLOCK)) 
BEGIN 
    ... 
END 

要超過這樣的速度更快:

IF EXISTS (SELECT 1 FROM table WITH (NOLOCK)) 
BEGIN 
    ... 
END 
+2

你如何執行並查看查詢執行計劃 – 2011-01-19 14:44:07

回答

3

兩者應該完全一樣。 SQL Server考慮到EXISTS是短路操作並且不評估返回結果,只是檢查是否有IS返回結果!

4

的存在是因爲,則表達式的值爲true先打後會停止,所以頂部(1 ) - 部分是不必要的。

2

不,它不會。

SQL Server在計劃中使用TOP評估EXISTS

2

該語句生成相同的查詢計劃,因此沒有區別。第二個例子在我看來更容易閱讀。