表變量與臨時表的優缺點?

什麼情況下使用表變量?  
什麼情況下臨時表?  
---------------------------------------------------------------  
 
表變量只存放在內存中,臨時表需要寫磁盤。所以一般情況下,用表變量會快些。  
 
用法不太一樣,有些時候用表變量更方便。  
 
具體的再看SQL  2000的幫助。試用下就知道了。  
---------------------------------------------------------------  
 
個人觀點:  
1、表變量缺省放在內存,速度快,所以在觸發器,存儲過程裏如果數據量不大,應該用表變量。  
2、臨時表缺省使用硬盤,一般來說速度比較慢,那是不是就不用臨時表呢?也不是,在數據量比較大的時候,如果使用表變量,會把內存耗盡,然後使用TEMPDB的空間,這樣主要還是使用硬盤空間,但同時把內存基本耗盡,增加了內存調入調出的機會,反而降低速度。這種情況建議先給TEMPDB一次分配合適的空間,然後使用臨時表。  
 
 
 
---------------------------------------------------------------  
 
膚淺理解:  
       表變量:需要事先知道表結構  
       普通臨時表:只在當前會話中可用與表變量相同  into一下就可以了,方便  
       全局臨時表:可在多個會話中使用存在於temp中需顯示的drop  
---------------------------------------------------------------  
 
要從表變量的作用域,支持不支持的操作,機器內存大小等幾方面考慮。  
如:  
.表變量相當於ADO的RECORDSET,速度比臨時錶快得多。  
表變量不能用在下列語句中:  
INSERT  INTO  table_variable  EXEC  存儲過程。  
SELECT  select_list  INTO  table_variable  語句。  
在定義  table  變量的函數、存儲過程或批處理結束時,自動清除  table  變量。  
但臨時表支持。  
.表變量速度比臨時錶快得多(如果內存足夠)  
如果數據量不大:  
微軟  BOOK  ON  LINE  內說:儘可能使用表變量而不使用臨時表  
---------------------------------------------------------------  
 
貼出來看看:  
 
儘可能使用表變量而不使用臨時表。table  變量有以下優點:    
 
table  變量的行爲類似於局部變量,有明確定義的作用域。該作用域爲聲明該變量的函數、存儲過程或批處理。    
在其作用域內,table  變量可像常規表那樣使用。該變量可應用於  SELECT、INSERT、UPDATE  和  DELETE  語句中用到表或表的表達式的地方。但是,table  不能用在下列語句中:  
 
INSERT  INTO  table_variable  EXEC  存儲過程。  
 
SELECT  select_list  INTO  table_variable  語句。  
 
在定義  table  變量的函數、存儲過程或批處理結束時,自動清除  table  變量。  
 
在存儲過程中使用表變量與使用臨時表相比,減少了存儲過程的重新編譯量。  
 
 
涉及表變量的事務只在表變量更新期間存在。這樣就減少了表變量對鎖定和記錄資源的需求。    
不支持在表變量之間進行賦值操作。另外,由於表變量作用域有限,並且不是持久數據庫的一部分,因而不受事務回滾的影響。  
 
---------------------------------------------------------------  
 
個人認爲:  
1.表變量在內存中,臨時表存放在硬盤上;  
2.用臨時表要考慮鎖不鎖表的問題;  
3.數據量太大應該用臨時表。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章