SQL SERVER視圖對查詢效率的提高


SQL SERVER視圖不僅可以實現許多我們需要的功能,而且對於SQL SERVER查詢效率的提高也有幫助,下面一起來了解一下。

  有兩張數據表:A和B,其中A的記錄為2萬條左右,而B中的數據為200萬條以上,現在要求以a.id=b.id為關聯進行數據篩選。

  為此要求,我做了個SQL SERVER視圖View1,將a.id與b.id關聯起來,運行該視圖的查詢,使用了2秒中就得到結果了。

  這時又有一特殊需求:編寫存儲過程,該存儲過程中有一個游標的循環,該循環重復1萬次,在每次循環中都使用了對View1的查詢。

  舉例如下:

  循環游標體(重復1萬次)

以下是代碼片段:
    { select @text=text from view1 whereid=@id 
  --其中@text,@id均為變量update form1 set text=@text where id=@id}

  執行以上的存儲過程,發現竟然要花費>7分鍾的運算時間,進行分析后得知效率全損耗在對view1視圖的掃描上,盡管單獨對該視圖進行查詢只需2秒,但在這種情況下即需要太多的時間。

  因此改進該存儲過程如下:

以下是代碼片段:
create table #tempTab( id nvarchar(20), text nvarchar(20))

  查詢View1視圖,將記錄插入到#tempTab臨時表中... 循環游標體(重復1萬次)

以下是代碼片段:
    { select @text=text from #tempTab whereid=@id 
  --其中@text,@id均為變量update form1 set text=@text where id=@id}

  別小瞧以上的改動,此時該存儲過程只花費50秒的時間。 對於上述現象,分析如下:在多次循環對某個視圖進行查詢時,將會耗費大量的時間,因此將該視圖的數據放在內存中進行計算會在很大程度上提高速度。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM