2012-09-18 131 views
1

從Sql server 2005升級到2008 R2後,我看到奇怪的行爲。 在升級下面的查詢在亞秒內運行但現在升級後10秒。兩張表都有數百萬行。查詢在從Sql Server 2005升級到Sql Server 2008 R2後運行緩慢

模型表中有可空列COLB的索引。下面的查詢顯然是做索引掃描,因爲是標量函數ISNULL被用於加入條款..

select distinct a.colA 
      from ptransaction a 
      inner join model b on ISNULL(b.colB,0) = a.colB 
      where a.transid = 234 

我沒有任何升級前的規劃信息,但此查詢永遠跑了1秒以上..所以不確定是否在Sql server 2008中的優化器行爲發生了變化,導致它運行緩慢。

我知道備用解決方案,但不想立即修改架構..我知道我可以在模型中將colB轉換爲notnull來解決此問題。其他解決方案是創建索引計算列,這將解決此問題。我們的env中的模式更改並不容易,所以想要探索Sql guru的這裏是否有一些想法或其他解決方案不需要模式更改。 我還不能理解優化器或整體sql server升級如何使這個查詢變得更糟。 任何幫助表示讚賞。

NJ

回答

0

根據我的經驗,如果有很多記錄ISNULL會減慢查詢。

試試這個代碼,結果是一樣的,但我傾向於以獲得最佳性能:

(b.colB is not null and b.colB = a.colB) OR (b.colB is null and a.colB = 0) 
+0

Nah..Still做索引掃描並同樣performance..I通過移除並行,但沒有顯著獲得一些提振..猜測繼續尋求改善.. – user1679411

相關問題