據我所知,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
據我所知,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
兩者應該完全一樣。 SQL Server考慮到EXISTS
是短路操作並且不評估返回結果,只是檢查是否有IS返回結果!
的存在是因爲,則表達式的值爲true先打後會停止,所以頂部(1 ) - 部分是不必要的。
不,它不會。
SQL Server
在計劃中使用TOP
評估EXISTS
。
該語句生成相同的查詢計劃,因此沒有區別。第二個例子在我看來更容易閱讀。
你如何執行並查看查詢執行計劃 – 2011-01-19 14:44:07