對SQL Server的這種行爲感到好奇。IN語句掛起SQL Server中的SELECT子查詢
這個查詢產生的結果非常快,就像我期望:
SELECT *
FROM dbo.v_View1 View1 FULL OUTER JOIN
dbo.v_View2 View2 ON View1.Portfolio = View2.Portfolio AND
View1.AsOfDate = View2.AsOfDate
where (View1.AsOfDate IN (NULL, '20130717'))
不過,我不希望有一個靜態日期在那裏,所以我用一個子查詢代替它。不幸的是,我已經等待這個查詢執行的時間最長爲5分鐘之前,我取消了,所以我不知道它是否確實會得到我的數據我想:
SELECT *
FROM dbo.v_View1 View1 FULL OUTER JOIN
dbo.v_View2 View2 ON View1.Portfolio = View2.Portfolio AND
View1.AsOfDate = View2.AsOfDate
where (View1.AsOfDate IN (NULL, (SELECT MAX(AsOfDate) FROM dbo.v_View1)))
我使出聲明一個變量,用上面的子查詢設置它,然後在IN語句中使用它,該語句按預期工作,並且運行速度與原始查詢快一樣。
我知道我做錯了什麼或錯過了什麼(可能兩者) - 它是什麼?我希望在IN語句中有子查詢,或者至少能夠將這個作爲沒有變量的視圖運行。謝謝!
看看執行計劃。 –