汗顏! 今天才發現一個新玩意,自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
 
找到兩篇不錯的參考資料
http://www.developer.com/db/print.php/3414331
http://support.microsoft.com/?kbid=305977

Comments

# by kingwaileung

n/a SO WELl

Post a comment


67 - 61 =