KB-SQL 2000的資料庫變數(Table Variable)
1 | 10,540 |
汗顏! 今天才發現一個新玩意,自SQL 2000起,除了暫存資料表之外,還有一個選擇 — 資料表變數(Table Variable)
資料表變數與暫存資料表(Temporary Table, 例如: #myTable)的應用時機很像,但資料表變數具有以下優點:
- 用於Stored Procedure時,不需要每次Recompile,速度較快
- 比照Local Variable,Scope定義明確,在不需要時就立刻會被清除
- Transaction Lock存在時間短,也不影響實體資料庫,資料的更新操作更有效率
但有得必有失,資料庫變數有以下缺點:
- 只支援PK及UNIQUE KEY,不能建立Non-Cluster Index,也沒有資料分佈統計機制,不利於大量資料或複雜的查詢,如果Table很大時,又有繁重的查詢時,這個問題會變得明顯。但是不要誤以為資料表變數永遠只用記憶體存資料,其在資料較大時也會引用磁碟空間存放資料。
- 基於Local Variable的限制,使用sp_executesql時無法存取
- 不支援SELECT INTO、INSERT EXEC
找到兩篇不錯的參考資料
Comments
# by kingwaileung
n/a SO WELl