Re: [SQL ] 在SQL Server中,有沒有暫存table的功能?

看板Database (資料庫)作者 (flak)時間18年前 (2006/12/04 11:38), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串3/3 (看更多)
MS-SQL可以用暫存資料表,用create table的語法即可 差別是Table名稱前面要加「#」 ,例如create table #T(col1 int,col2 varchar(255)...) 則Server會建立一個資料表在tempdb資料庫中,只有你的工作階段存取得到 呼叫Drop Table #T,或是工作階段、預存程序結束後就消失 SQL 2000後有資料表變數,要用變數方式宣告,但必須單獨宣告,不能與其他變數一起 宣告: Declare @T Table(col1 int,col2 varchar(255)... 資料表變數的生命週期比較短,在以SQL Query Analyzer中宣告時,每執行一次就消失 了,跟變數一樣。但暫存資料表會繼續留著,直到Query Analyzer的工作中視窗關閉為 止,所以要再次執行同一視窗的指令的話,要先Drop Table #T才能再Create Table #T 微軟宣稱資料表變數是把資料放在記憶體,就像程式語言的陣列變數一樣,所以速度最快 ,希望大家用它來取代暫存資料表。但實際上,國外使用者都懷疑這種說法,資料表變數 似乎仍然是有資料寫在硬碟裡面,所以存取它還是有硬碟I/O。不過可能它的資料結構比 較簡單,所以一般資料不大的時候真的比較快。 但資料表變數的問題是不能建Index,所以存放資料筆數多的時候,反而比較慢 而暫存資料表因為是完整的資料表,所以還是可以建Index,也可以用Index Hint的方法 替大量資料的查詢最佳化。但要注意的是暫存資料表其實就是tempdb資料庫裡面的資料表 所以存取速度會被tempdb所安裝的硬碟速度所影響,也要注意該硬碟的容量是否足夠 ※ 引述《artingo (魚與熊掌如何兼得)》之銘言: : 假設我要把某一個select的結果集 : 存到記憶體中的一個暫存table : 以便再對該暫存table作SQL指令存取 : 有這個指令嗎? : 我只知道在Foxpro中可以用Into cursor tempXXX 的方式來作 : 那SQL server或是Access所支援的指令是? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 210.64.110.97
文章代碼(AID): #15SvWcpJ (Database)
文章代碼(AID): #15SvWcpJ (Database)