表变量与临时表的优缺点?(ZT)
生活随笔
收集整理的這篇文章主要介紹了
表变量与临时表的优缺点?(ZT)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
什么情況下使用表變量? ?
什么情況下臨時表? ?
--------------------------------------------------------------- ?
?
表變量只存放在內存中,臨時表需要寫磁盤。所以一般情況下,用表變量會快些。 ?
?
用法不太一樣,有些時候用表變量更方便。 ?
?
具體的再看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.數據量太大應該用臨時表。
什么情況下臨時表? ?
--------------------------------------------------------------- ?
?
表變量只存放在內存中,臨時表需要寫磁盤。所以一般情況下,用表變量會快些。 ?
?
用法不太一樣,有些時候用表變量更方便。 ?
?
具體的再看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.數據量太大應該用臨時表。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=96728
總結
以上是生活随笔為你收集整理的表变量与临时表的优缺点?(ZT)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: maxthon在浏览的页面上右键按住不动
- 下一篇: Spring2 Hibernate3 J