會使用暫存表的情境,除了需要對資料做多次操作之外,再者就是要取得的資料過程過於複雜,如子查詢或是JOIN 三張表以上,而暫存表有幾種分類,稍微紀錄差異
暫存表#Table
這類暫存表(單「#」號)是我最常使用的,資料儲存於硬碟(disk),資料於與資料庫的連線 session 中斷時會刪除,
但建議自己手動加入刪除 drop table,無法跨交易或資料庫讀取資料。
以下我們建立一個暫存表 #tmpPersons 並且塞入資料,讀取出來呈現後刪除該暫存表
若此時我們故意等待 30秒來觀察暫存表的生成,並且使用另外一個指述(交易)來讀取該暫存表,
觀察其讀取失敗
等待 30秒後,原本的交易會往下執行並且讀取該暫存表,後續刪除該暫存表
暫存表##Table
這類暫存表(雙「#」號)與單「#」號暫存表同樣是將資料儲存於disk,同樣與資料庫的連線 session 中斷時會刪除,
只是這類表是屬於「全域」,故可以跨資料庫與交易存取的,如以下建立一個 ##tmpPersons
而在等待的過程中使用另外一個指述(交易)來讀取 ##tmpPersons 是可行滴,即使跨資料也可以
暫存表@Table
這類資料表會將資料儲存於 記憶體(memory)中,且無法自行使用 drop table 刪除,該暫存表僅能單一交易使用
,指令執行結束就會自動刪除
以下我們定義一個暫存表@tmpPersons,定義後會在暫存資料庫產生一個隨機的暫存表,
故在等待時間,即使使用語法讀取 @tmpPersons 是讀取不到的
以下列表比較
參考
沒有留言:
張貼留言