臨時(shí)表
臨時(shí)表與永久表相似,但臨時(shí)表存儲(chǔ)在 tempdb 中,當(dāng)不再使用時(shí)會(huì)自動(dòng)刪除。
臨時(shí)表有兩種類(lèi)型:本地和全局。它們?cè)诿Q(chēng)、可見(jiàn)性以及可用性上有區(qū)別。本地臨時(shí)表的名稱(chēng)以單個(gè)數(shù)字符號(hào) (#) 打頭;它們僅對(duì)當(dāng)前的用戶(hù)連接是可見(jiàn)的;當(dāng)用戶(hù)從 SQL Server 實(shí)例斷開(kāi)連接時(shí)被刪除。全局臨時(shí)表的名稱(chēng)以?xún)蓚€(gè)數(shù)字符號(hào) (##) 打頭,創(chuàng)建后對(duì)任何用戶(hù)都是可見(jiàn)的,當(dāng)所有引用該表的用戶(hù)從 SQL Server 斷開(kāi)連接時(shí)被刪除。
例如,如果創(chuàng)建了 employees 表,則任何在數(shù)據(jù)庫(kù)中有使用該表的安全權(quán)限的用戶(hù)都可以使用該表,除非已將其刪除。如果數(shù)據(jù)庫(kù)會(huì)話(huà)創(chuàng)建了本地臨時(shí)表 #employees,則僅會(huì)話(huà)可以使用該表,會(huì)話(huà)斷開(kāi)連接后就將該表刪除。如果創(chuàng)建了 ##employees 全局臨時(shí)表,則數(shù)據(jù)庫(kù)中的任何用戶(hù)均可使用該表。如果該表在您創(chuàng)建后沒(méi)有其他用戶(hù)使用,則當(dāng)您斷開(kāi)連接時(shí)該表刪除。如果您創(chuàng)建該表后另一個(gè)用戶(hù)在使用該表,則 SQL Server 將在您斷開(kāi)連接并且所有其他會(huì)話(huà)不再使用該表時(shí)將其刪除。
視圖視圖
可以被看成是虛擬表或存儲(chǔ)查詢(xún)。除非是索引視圖,否則視圖的數(shù)據(jù)不會(huì)作為非重復(fù)對(duì)象存儲(chǔ)在數(shù)據(jù)庫(kù)中。數(shù)據(jù)庫(kù)中存儲(chǔ)的是 SELECT 語(yǔ)句。SELECT 語(yǔ)句的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶(hù)可以采用引用表時(shí)所使用的方法,在 Transact-SQL 語(yǔ)句中引用視圖名稱(chēng)來(lái)使用此虛擬表
視圖是一個(gè)虛擬表,其內(nèi)容由查詢(xún)定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱(chēng)的列和行數(shù)據(jù)。視圖在數(shù)據(jù)庫(kù)中并不是以數(shù)據(jù)值存儲(chǔ)集形式存在,除非是索引視圖。行和列數(shù)據(jù)來(lái)自由定義視圖的查詢(xún)所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。
對(duì)其中所引用的基礎(chǔ)表來(lái)說(shuō),視圖的作用類(lèi)似于篩選。定義視圖的篩選可以來(lái)自當(dāng)前或其他數(shù)據(jù)庫(kù)的一個(gè)或多個(gè)表,或者其他視圖。分布式查詢(xún)也可用于定義使用多個(gè)異類(lèi)源數(shù)據(jù)的視圖。例如,如果有多臺(tái)不同的服務(wù)器分別存儲(chǔ)您的單位在不同地區(qū)的數(shù)據(jù),而您需要將這些服務(wù)器上結(jié)構(gòu)相似的數(shù)據(jù)組合起來(lái),這種方式就很有用。
通過(guò)視圖進(jìn)行查詢(xún)沒(méi)有任何限制,通過(guò)它們進(jìn)行數(shù)據(jù)修改時(shí)的限制也很少。
視圖種類(lèi):索引視圖和索引視圖
SQL Server 2005 查詢(xún)處理器對(duì)索引視圖和非索引視圖將區(qū)別對(duì)待: 索引視圖的行以表的格式存儲(chǔ)在數(shù)據(jù)庫(kù)中。如果查詢(xún)優(yōu)化器決定使用查詢(xún)計(jì)劃的索引視圖,則索引視圖將按照基表的處理方式進(jìn)行處理。只有非索引視圖的定義才存儲(chǔ),而不存儲(chǔ)視圖的行。查詢(xún)優(yōu)化器將視圖定義中的邏輯納入執(zhí)行計(jì)劃,而該執(zhí)行計(jì)劃是它為引用非索引視圖的 SQL 語(yǔ)句生成的。
SQL Server 查詢(xún)優(yōu)化器用于決定何時(shí)使用索引視圖的邏輯與用于決定何時(shí)對(duì)表使用索引的邏輯相似。如果索引視圖中的數(shù)據(jù)包括所有或部分 SQL 語(yǔ)句,而且查詢(xún)優(yōu)化器確定視圖的某個(gè)索引是低成本的訪(fǎng)問(wèn)路徑,則不論查詢(xún)中是否引用了該視圖的名稱(chēng),查詢(xún)優(yōu)化器都將選擇此索引。當(dāng) SQL 語(yǔ)句引用非索引視圖時(shí),分析器和查詢(xún)優(yōu)化器將分析 SQL 語(yǔ)句的源和視圖的源,然后將它們解析為單個(gè)執(zhí)行計(jì)劃。
臨時(shí)表與永久表相似,但臨時(shí)表存儲(chǔ)在 tempdb 中,當(dāng)不再使用時(shí)會(huì)自動(dòng)刪除。
臨時(shí)表有兩種類(lèi)型:本地和全局。它們?cè)诿Q(chēng)、可見(jiàn)性以及可用性上有區(qū)別。本地臨時(shí)表的名稱(chēng)以單個(gè)數(shù)字符號(hào) (#) 打頭;它們僅對(duì)當(dāng)前的用戶(hù)連接是可見(jiàn)的;當(dāng)用戶(hù)從 SQL Server 實(shí)例斷開(kāi)連接時(shí)被刪除。全局臨時(shí)表的名稱(chēng)以?xún)蓚€(gè)數(shù)字符號(hào) (##) 打頭,創(chuàng)建后對(duì)任何用戶(hù)都是可見(jiàn)的,當(dāng)所有引用該表的用戶(hù)從 SQL Server 斷開(kāi)連接時(shí)被刪除。
例如,如果創(chuàng)建了 employees 表,則任何在數(shù)據(jù)庫(kù)中有使用該表的安全權(quán)限的用戶(hù)都可以使用該表,除非已將其刪除。如果數(shù)據(jù)庫(kù)會(huì)話(huà)創(chuàng)建了本地臨時(shí)表 #employees,則僅會(huì)話(huà)可以使用該表,會(huì)話(huà)斷開(kāi)連接后就將該表刪除。如果創(chuàng)建了 ##employees 全局臨時(shí)表,則數(shù)據(jù)庫(kù)中的任何用戶(hù)均可使用該表。如果該表在您創(chuàng)建后沒(méi)有其他用戶(hù)使用,則當(dāng)您斷開(kāi)連接時(shí)該表刪除。如果您創(chuàng)建該表后另一個(gè)用戶(hù)在使用該表,則 SQL Server 將在您斷開(kāi)連接并且所有其他會(huì)話(huà)不再使用該表時(shí)將其刪除。
視圖視圖
可以被看成是虛擬表或存儲(chǔ)查詢(xún)。除非是索引視圖,否則視圖的數(shù)據(jù)不會(huì)作為非重復(fù)對(duì)象存儲(chǔ)在數(shù)據(jù)庫(kù)中。數(shù)據(jù)庫(kù)中存儲(chǔ)的是 SELECT 語(yǔ)句。SELECT 語(yǔ)句的結(jié)果集構(gòu)成視圖所返回的虛擬表。用戶(hù)可以采用引用表時(shí)所使用的方法,在 Transact-SQL 語(yǔ)句中引用視圖名稱(chēng)來(lái)使用此虛擬表
視圖是一個(gè)虛擬表,其內(nèi)容由查詢(xún)定義。同真實(shí)的表一樣,視圖包含一系列帶有名稱(chēng)的列和行數(shù)據(jù)。視圖在數(shù)據(jù)庫(kù)中并不是以數(shù)據(jù)值存儲(chǔ)集形式存在,除非是索引視圖。行和列數(shù)據(jù)來(lái)自由定義視圖的查詢(xún)所引用的表,并且在引用視圖時(shí)動(dòng)態(tài)生成。
對(duì)其中所引用的基礎(chǔ)表來(lái)說(shuō),視圖的作用類(lèi)似于篩選。定義視圖的篩選可以來(lái)自當(dāng)前或其他數(shù)據(jù)庫(kù)的一個(gè)或多個(gè)表,或者其他視圖。分布式查詢(xún)也可用于定義使用多個(gè)異類(lèi)源數(shù)據(jù)的視圖。例如,如果有多臺(tái)不同的服務(wù)器分別存儲(chǔ)您的單位在不同地區(qū)的數(shù)據(jù),而您需要將這些服務(wù)器上結(jié)構(gòu)相似的數(shù)據(jù)組合起來(lái),這種方式就很有用。
通過(guò)視圖進(jìn)行查詢(xún)沒(méi)有任何限制,通過(guò)它們進(jìn)行數(shù)據(jù)修改時(shí)的限制也很少。
視圖種類(lèi):索引視圖和索引視圖
SQL Server 2005 查詢(xún)處理器對(duì)索引視圖和非索引視圖將區(qū)別對(duì)待: 索引視圖的行以表的格式存儲(chǔ)在數(shù)據(jù)庫(kù)中。如果查詢(xún)優(yōu)化器決定使用查詢(xún)計(jì)劃的索引視圖,則索引視圖將按照基表的處理方式進(jìn)行處理。只有非索引視圖的定義才存儲(chǔ),而不存儲(chǔ)視圖的行。查詢(xún)優(yōu)化器將視圖定義中的邏輯納入執(zhí)行計(jì)劃,而該執(zhí)行計(jì)劃是它為引用非索引視圖的 SQL 語(yǔ)句生成的。
SQL Server 查詢(xún)優(yōu)化器用于決定何時(shí)使用索引視圖的邏輯與用于決定何時(shí)對(duì)表使用索引的邏輯相似。如果索引視圖中的數(shù)據(jù)包括所有或部分 SQL 語(yǔ)句,而且查詢(xún)優(yōu)化器確定視圖的某個(gè)索引是低成本的訪(fǎng)問(wèn)路徑,則不論查詢(xún)中是否引用了該視圖的名稱(chēng),查詢(xún)優(yōu)化器都將選擇此索引。當(dāng) SQL 語(yǔ)句引用非索引視圖時(shí),分析器和查詢(xún)優(yōu)化器將分析 SQL 語(yǔ)句的源和視圖的源,然后將它們解析為單個(gè)執(zhí)行計(jì)劃。