問題 1:為什麼在已經有了臨時表的情況下還要引入表變數?
解答 1:與臨時表相比,表變數具有下列優點:
問題 2:如果說使用表變數比使用臨時表導致儲存過程的重新編譯更少,這意味著什麼?243586 儲存過程重新編譯的疑難解答
「由於某些臨時表操作引起的重新編譯」一節還列出了為避免一些問題(例如使用臨時表導致重新編譯)而需要滿足的一些要求。這些限制不適用於表變數。
表變數完全獨立於建立這些表變數的批,因此,當執行 create 或 alter
語句時,不會發生「重新解析」,而在使用臨時表時可能會發生「重新解析」。臨時表需要此「重新解析」,以便從巢狀儲存過程引用該錶。表變數完全避免了此問
題,因此儲存過程可以使用已編譯的計畫,從而節省了處理儲存過程的資源。
問題 3:表變數有哪些缺陷?
解答 3:與臨時表相比,它存在下列缺陷:
問題 4:與臨時表或永久表相比,表變數的僅存在於記憶體中的結構保證了更好的效能,是否因為它們是在駐留在物理磁碟上的資料庫中維護的?
解答 4:表變數不是僅存在於記憶體中的結構。由於表變數可能保留的資料較多,記憶體中容納不下,因此它必須在磁碟上有乙個位置來儲存資料。與臨時表類似,表變數是在tempdb資料庫中建立的。如果有足夠的記憶體,則表變數和臨時表都在記憶體(資料快取)中建立和處理。
問題 5:必須使用表變數來代替臨時表嗎?
解答 5:答案取決於以下三個因素:
在某些情況下,可將乙個具有臨時表的儲存過程拆分為多個較小的儲存過程,以便在較小的單元上進行重新編譯。
通常情況下,應盡量使用表變數,除非資料量非常大並且需要重複使用表。在這種情況下,可以在臨時表上建立索引以提高查詢效能。但是,各種方案可能互不相同。microsoft 建議您做乙個測試,來驗證表變數對於特定的查詢或儲存過程是否比臨時表更有效。
**:
T SQL之表變數與臨時表的比較
參考 總結 特性表變數臨時表 作用域當前批處理 當前會話,巢狀儲存過程,全域性 所有會話 使用場景 自定義函式,儲存過程,批處理 自定義函式,儲存過程,批處理 建立方式 declare statement only.只能通過decleare語句建立 create table 語句 select in...
T SQL之表變數與臨時表的比較
參考 總結 特性 表變數 臨時表 作用域當前批處理 當前會話,巢狀儲存過程,全域性 所有會話 使用場景 自定義函式,儲存過程,批處理 自定義函式,儲存過程,批處理 建立方式 declare statement only.只能通過decleare語句建立 create table 語句 select ...
鍊錶虛擬頭結點存在的意義
鍊錶又 資料域 還有指標域 資料結構中,在單鏈表的開始結點之前附設乙個型別相同的結點,稱之為頭結點。頭結點的資料域可以不儲存任何資訊,頭結點的指標域儲存指向開始結點的指標 即第乙個元素結點的儲存位置 作用 1 防止單鏈表是空的而設的.當鍊表為空的時候,帶頭結點的頭指標就指向頭結點.如果當鍊表為空的時...