我注意到下面的時間是32秒在SQL Server(2008 R2)查詢減慢條件下IF
IF ((SELECT COUNT(*) FROM view1) != 0)
OR ((SELECT COUNT(*) FROM view2) != 0)
OR ((SELECT COUNT(*) FROM view3) != 0)
OR ((SELECT COUNT(*) FROM view4) != 0)
OR ((SELECT COUNT(*) FROM view5) != 0)
OR ((SELECT COUNT(*) FROM view6) != 0)
PRINT 'HI'
運行然而,只有以下了4秒
SELECT
(SELECT COUNT(*) FROM view1)
, (SELECT COUNT(*) FROM view2)
, (SELECT COUNT(*) FROM view3)
, (SELECT COUNT(*) FROM view4)
, (SELECT COUNT(*) FROM view5)
, (SELECT COUNT(*) FROM viwe6)
我有設法通過執行SELECT COUNT(1)... + SELECT ...!= 0來優化條件,這樣它需要4秒,但是查看執行計劃還沒有產生任何特別顯着的結果。沒有太多的機會用google搜索詞或者。
有人可以分享一下SQL Server優化器可能在背後做什麼嗎?
編輯:如果EXISTS嘗試了38秒。
IF EXISTS ((SELECT 1 FROM view1)
UNION (SELECT 1 FROM view2)
UNION (SELECT 1 FROM view3)
UNION (SELECT 1 FROM view4)
UNION (SELECT 1 FROM view5)
UNION (SELECT 1 FROM view6))
PRINT 'HI'
EDIT2:目前的第5種方法。
IF (SELECT COUNT(1) FROM view1)
+ (SELECT COUNT(1) FROM view2)
+ (SELECT COUNT(1) FROM view3)
+ (SELECT COUNT(1) FROM view4)
+ (SELECT COUNT(1) FROM view5)
+ (SELECT COUNT(1) FROM viwe6) != 0
PRINT 'HI'
EDIT3:比較20page大小的查詢計劃之後 - 它出現的加速主要是由於基本觀點都做了局部聚集的加入,而不是做連接,然後彙總之前。
你做EXISTS獲得更好的性能(SELECT 1 FROM廠景),因爲這會停止尋找它發現一排後,而不是統計所有行。 – Brandon 2014-11-25 01:31:33
我確實嘗試了EXISTS。但它也花了大約38秒。我會把我在編輯中嘗試的東西放進去。 – 2014-11-25 01:43:45
一個快速的想法把計數結果放到變量中,然後使用IF條件 – 2014-11-25 06:55:51