Re: [SQL ] 在SQL Server中,有沒有暫存table的功能?
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
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 3 之 3 篇):
Database 近期熱門文章
PTT數位生活區 即時熱門文章