汗顏! 今天才發現一個新玩意,自SQL 2000起,除了暫存資料表之外,還有一個選擇 — 資料表變數(Table Variable)

資料表變數與暫存資料表(Temporary Table, 例如: #myTable)的應用時機很像,但資料表變數具有以下優點:

  1. 用於Stored Procedure時,不需要每次Recompile,速度較快
  2. 比照Local Variable,Scope定義明確,在不需要時就立刻會被清除
  3. Transaction Lock存在時間短,也不影響實體資料庫,資料的更新操作更有效率

但有得必有失,資料庫變數有以下缺點:

  1. 只支援PK及UNIQUE KEY,不能建立Non-Cluster Index,也沒有資料分佈統計機制,不利於大量資料或複雜的查詢,如果Table很大時,又有繁重的查詢時,這個問題會變得明顯。但是不要誤以為資料表變數永遠只用記憶體存資料,其在資料較大時也會引用磁碟空間存放資料。
  2. 基於Local Variable的限制,使用sp_executesql時無法存取
  3. 不支援SELECT INTO、INSERT EXEC

找到兩篇不錯的參考資料


Comments

# by kingwaileung

n/a SO WELl

Post a comment