Posted on 2011-11-24 09:19
陳小東 閱讀(1003)
評論(0) 編輯 收藏
臨時表
臨時表與永久表相似,但臨時表存儲在 tempdb 中,當不再使用時會自動刪除。
臨時表有兩種類型:本地和全局。它們在名稱、可見性以及可用性上有區別。本地臨時表的名稱以單個數字符號 (#) 打頭;它們僅對當前的用戶連接是可見的;當用戶從 SQL Server 實例斷開連接時被刪除。全局臨時表的名稱以兩個數字符號 (##) 打頭,創建后對任何用戶都是可見的,當所有引用該表的用戶從 SQL Server 斷開連接時被刪除。
例如,如果創建了 employees 表,則任何在數據庫中有使用該表的安全權限的用戶都可以使用該表,除非已將其刪除。如果數據庫會話創建了本地臨時表 #employees,則僅會話可以使用該表,會話斷開連接后就將該表刪除。如果創建了 ##employees 全局臨時表,則數據庫中的任何用戶均可使用該表。如果該表在您創建后沒有其他用戶使用,則當您斷開連接時該表刪除。如果您創建該表后另一個用戶在使用該表,則 SQL Server 將在您斷開連接并且所有其他會話不再使用該表時將其刪除。
視圖視圖
可以被看成是虛擬表或存儲查詢。除非是索引視圖,否則視圖的數據不會作為非重復對象存儲在數據庫中。數據庫中存儲的是 SELECT 語句。SELECT 語句的結果集構成視圖所返回的虛擬表。用戶可以采用引用表時所使用的方法,在 Transact-SQL 語句中引用視圖名稱來使用此虛擬表
視圖是一個虛擬表,其內容由查詢定義。同真實的表一樣,視圖包含一系列帶有名稱的列和行數據。視圖在數據庫中并不是以數據值存儲集形式存在,除非是索引視圖。行和列數據來自由定義視圖的查詢所引用的表,并且在引用視圖時動態生成。
對其中所引用的基礎表來說,視圖的作用類似于篩選。定義視圖的篩選可以來自當前或其他數據庫的一個或多個表,或者其他視圖。分布式查詢也可用于定義使用多個異類源數據的視圖。例如,如果有多臺不同的服務器分別存儲您的單位在不同地區的數據,而您需要將這些服務器上結構相似的數據組合起來,這種方式就很有用。
通過視圖進行查詢沒有任何限制,通過它們進行數據修改時的限制也很少。
視圖種類:索引視圖和索引視圖
SQL Server 2005 查詢處理器對索引視圖和非索引視圖將區別對待: 索引視圖的行以表的格式存儲在數據庫中。如果查詢優化器決定使用查詢計劃的索引視圖,則索引視圖將按照基表的處理方式進行處理。只有非索引視圖的定義才存儲,而不存儲視圖的行。查詢優化器將視圖定義中的邏輯納入執行計劃,而該執行計劃是它為引用非索引視圖的 SQL 語句生成的。
SQL Server 查詢優化器用于決定何時使用索引視圖的邏輯與用于決定何時對表使用索引的邏輯相似。如果索引視圖中的數據包括所有或部分 SQL 語句,而且查詢優化器確定視圖的某個索引是低成本的訪問路徑,則不論查詢中是否引用了該視圖的名稱,查詢優化器都將選擇此索引。當 SQL 語句引用非索引視圖時,分析器和查詢優化器將分析 SQL 語句的源和視圖的源,然后將它們解析為單個執行計劃。