視圖和索引課件_第1頁
視圖和索引課件_第2頁
視圖和索引課件_第3頁
視圖和索引課件_第4頁
視圖和索引課件_第5頁
已閱讀5頁,還剩63頁未讀, 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、電氣與電子工程學院數據庫的基本表是按照數據庫設計人員的觀點設計的,并不一定符合用戶的需求。SQL Server可以根據用戶需求重新定義表的數據結構,這種數據結構就是視圖。視圖是關系數據庫系統提供給用戶以多種角度觀察數據庫中數據的重要機制,其結構和數據是建立在對表的查詢基礎上的。索引是以表列為基礎的數據庫對象,它保存著表中排序的索引列,并且記錄了索引列在數據表中的物理存儲位置,實現了表中數據的邏輯排序。數據庫中的索引與書籍中的目錄類似,在一本書中,目錄可以方便用戶不必閱讀整本書就能找到需要的內容。在數據庫中,索引可以使數據庫程序在最短的時間內找到所需要的數據,而不必查找整個數據庫,這樣可以節省時

2、間,提高查找效率。在數據庫的三級模式結構當中,索引對應的是內模式部分,基本表對應的是模式部分,而視圖對應的是外模式部分。本章主要介紹視圖的基本概念,視圖的創建、修改和刪除,利用視圖實現對基本表中數據的操作;索引的基本概念,索引的分類以及創建、修改和刪除索引等操作。8.1 視圖視圖(View)是關系數據庫系統提供給用戶以多種角度觀察數據庫中數據的重要機制,是從一個或幾個表導出來的表,不是真實存在的基本表而是一張虛表;視圖所對應的數據并不實際地以視圖結構存儲在數據庫中,而是存儲在視圖所引用的表中,視圖實際上是一個查詢結果。在用戶看來,視圖是通過不同路徑去看一個實際表,就像一個窗口,我們通過窗口去看

3、外面的高樓,可以看到高樓的不同部分,而透過視圖可以看到數據庫中自己感興趣的內容。8.1.1 視圖概述視圖作為一種數據庫對象,為用戶提供了一個可以檢索數據表中數據的方式。視圖是一個虛表,可以視為另一種形式的表,是從一個或多個表中使用SELECT語句導出的虛擬表,那些用來導出視圖的表稱為基本表。用戶通過視圖來瀏覽數據表中感興趣的部分或全部數據,而數據的物理存儲位置仍然在基本表中。所以視圖并不是以一組數據的形式存儲在數據庫中,數據庫中只存儲視圖的定義,而不存儲視圖對應的數據,這些數據仍存儲在導出視圖的基本表中。當基本表中的數據發生變化時,從視圖中查詢出來的數據也隨之改變。使用視圖可以集中、簡化和定制

4、用戶的數據庫顯示,用戶可以通過視圖來訪問數據,而不必直接去訪問該視圖的基本表。1. 視圖的優點(1)為用戶集中數據,簡化用戶的數據查詢和處理。使得分散在多個表中的數據,通過視圖定義在一起,屏蔽了數據庫的復雜性,用戶不必輸入復雜的查詢語句,只需針對此視圖做簡單的查詢即可。(2)保證數據的邏輯獨立性。對于視圖的操作,例如,查詢只依賴于視圖的定義,當構成視圖的基本表需要修改時,只需要修改視圖定義中的子查詢部分,而基于視圖的查詢不用改變。簡化查詢操作,屏蔽了數據庫的復雜性。(3)重新定制數據,使得數據便于共享;合并分割數據,有利于數據輸出到應用程序中。(4)數據保密。對不同的用戶定義不同的視圖,使用戶

5、只能看到與自己有關的數據。同時簡化了用戶權限的管理,增加了安全性。 2. 視圖的分類SQL Server 2008中,視圖可以分為標準視圖、索引視圖和分區視圖。(1)標準視圖標準視圖組合了一個或多個表中的數據,可以獲得使用視圖的大多數好處,可以實現對數據庫的查詢、修改和刪除等基本操作。(2)索引視圖索引視圖是被具體化了的視圖,它已經過計算并存儲??梢詾橐晥D創建索引,即對視圖創建一個唯一的聚集索引。索引視圖可以顯著提高某些類型查詢的性能。索引視圖尤其適于聚合許多行的查詢,但不太適合于經常更新的基本數據集。(3)分區視圖分區視圖在一臺或多臺服務器間水平連接一組成員中的分區數據。這樣,數據看上去如同

6、來自于一個表。8.1.2 創建視圖要使用視圖,首先必須創建視圖。視圖在數據庫中是作為一個獨立的對象存儲的,必須遵循以下原則。(1)只能在當前數據庫中創建視圖。但是,如果使用分布式查詢定義視圖,則新視圖所引用的表和視圖可以存在于其他數據庫中,甚至其他服務器上。(2)視圖名稱必須遵循標識符的規則,且對每個用戶必須唯一。此外,該名稱不得與該用戶擁有的任何表的名稱相同。(3)用戶可以在其他視圖之上建立視圖。(4)如果視圖中的某一列是一個算術表達式、內置函數或常量派生而來,而且視圖中兩個或者更多的不同列擁有一個相同的名字(這種情況通常是因為在視圖的定義中有一個連接,而且這兩個或者多個來自不同表的列擁有相

7、同的名字),此時,用戶需要為視圖的每一列指定特定的名稱。(5)定義視圖的查詢不可以包含ORDER BY、COMPUTE或COMPUTE BY子句或INTO關鍵字。(6)不能在視圖上定義全文索引定義。(7)不能創建臨時視圖,不能在臨時表上創建視圖。(8)不能對視圖執行全文查詢,但是如果查詢所引用的表支持全文索引,就可以在視圖定義中包含全文查詢。(9)不能將規則或者DEFAULT定義關聯于視圖。在SQL Server 2008中創建視圖主要有兩種方式:一種方式是在SQL Server Management Studio中使用向導創建視圖;另一種方式是通過在查詢窗口中執行T-SQL語句創建視圖。1.

8、在SQL Server Management Studio中創建視圖在SQL Server Management Studio使用向導創建視圖,是一種圖形界面環境下最快捷的創建方式,其步驟如下:(1)在“對象資源管理器”中展開要創建視圖的數據庫如“teaching”,展開“視圖”選項,可以看到視圖列表中系統自動為數據庫創建的系統視圖。右鍵單擊“視圖”選項,選擇“新建視圖”菜單,打開“添加表”對話框,在此對話框中,可以選擇表、視圖或者函數,然后單擊“添加”按鈕,就可以將其添加到視圖查詢中 。(2)以創建學生表中所有“男”生信息的視圖為例。選擇“學生表”后,單擊“添加”按鈕,單擊“關閉”按鈕,返回

9、“新建視圖”對話框。(3)在對話框上半部分,可看到添加進來的“學生表”,選擇視圖所用的列;在對話框中間網格窗格部分,可看到在上半部分的復選框中所選擇的對應表的列,在“性別”列的篩選器中寫出篩選條件“ =男”;在對話框下半部分,可看到系統同時生成的T-SQL語句。然后,單擊工具欄上的“保存”按鈕,視圖取名為“男生視圖” 2.使用T-SQL語句創建視圖SQL Server 2008提供了CREATE VIEW語句創建視圖,語法格式如下:CREATE VIEW schema_name.view_name (column_name ,.n ) with ,nmselect_statementWITH

10、CHECK OPTION【例8-1】創建s_c_sc視圖,包括“計算機”專業的學生的學號、姓名,和他們選修的課程號、課程名和成績。USE teachingGOCREATE VIEW s_c_scASSELECT student.sno,sname,o,cname,scoreFROM student,sc,course WHERE student.sno=sc.sno AND o=o AND specialty=計算機GO【例8-2】創建inve_count庫存統計視圖,求每種商品的總庫存量,要求包括商品編號和商品名稱。USE inventoryGOCREATE VIEW inve_countA

11、SSELECT goods.gno,gname,SUM(number) AS snumberFROM goods,inventWHERE goods.gno=invent.gnoGROUP BY goods.gno,gnameGO8.1.3 修改視圖1.在SQL Server Management Studio中修改視圖使用SQL Server Management Studio修改視圖的操作步驟如下:(1)打開SQL Server Management Studio的對象資源管理器,展開相應數據庫文件夾。(2)展開“視圖”選項,右擊要修改的視圖,選擇“設計”命令。(3)如果要向視圖中再添加表

12、,則可以在窗格中右鍵單擊鼠標,選擇“添加表”。(4)如果要修改其他屬性,則在對話框上半部分,可重新選擇視圖所用的列;在中間的網格窗格部分,對視圖每一列進行屬性設置。最后,單擊工具欄上的“保存”按鈕保存修改后的視圖。(5)例如,修改“男生視圖”,用于查詢所有男生選課情況的信息。首先添加“選課表”,然后選擇其中的“課程號”和“成績”列,其它屬性不變,在對話框下半部分,可看到系統同時對T-SQL語句的修改。最后,單擊工具欄上的“保存”按鈕保存修改后的“男生視圖”。2.使用T-SQL語句修改視圖T-SQL提供了ALTER VIEW語句修改視圖,語法格式如下:ALTER VIEW schema_name

13、.view_name (column_name ,.n ) withnAS select_statement ; WITH CHECK OPTION 注:語句中的參數與CREATE VIEW語句中參數相同。【例8-3】修改inve_count視圖,求每種商品的總庫存數量和所在倉庫個數,要求包括商品編號和商品名稱。USE inventoryGOALTER VIEW inve_countASSELECT goods.gno,gname,SUM(number) AS snumber,COUNT(stno) AS storenum FROM goods,inventWHERE goods.gno=in

14、vent.gnoGROUP BY goods.gno,gnameGO【例8-4】在視圖上創建視圖:創建goodscount商品統計視圖,求每種商品的總庫存數量和和總價值,要求包括商品編號和商品名稱。USE inventoryGOCREATE VIEW goodscountASSELECT goods.gno,gname,snumber,snumber*price as sumpriseFROM goods,inve_countWHERE goods.gno=inve_count.gnoGO8.1.4 使用視圖視圖創建完畢,就可以如同查詢基本表一樣通過視圖查詢所需要的數據,而且有些查詢需求的數據

15、直接從視圖中獲取比從基表中獲取數據要簡單,也可以通過視圖修改基表中的數據。1.使用視圖進行數據查詢可以在SQL Server Management Studio中選中要查詢的視圖并打開,瀏覽該視圖查詢的所有數據;也可以在查詢窗口中執行T-SQL語句查詢視圖。例如,要查詢各種商品的庫存統計信息,就可以在SQL Server Management Studio中右鍵單擊inve_count視圖,選擇“編輯前200行”選項,即可瀏覽各種商品的庫存統計信息。也可以在查詢窗口中執行如下T-SQL語句:SELECT * FROM inve_count【例8-5】在查詢窗口中查詢s_c_sc視圖,統計“C+

16、語言”課程的總分和平均分。USE teachingSELECT sumscore=SUM(score),avgscore=AVG(score)FROM s_c_scWHERE cname=C+語言【例8-6】查詢inve_count視圖中“冰箱”的商品統計信息。USE inventorySELECT * FROM inve_countWHERE gname=冰箱2.使用視圖修改基本表中數據修改視圖的數據,其實就是對基本表進行修改,真正插入數據的地方是基本表,而不是視圖。同樣使用INSERT、UPDATE、DELETE語句來完成。但是在對視圖進行修改的時候也要注意一些事項,并不是所有的視圖都可以

17、更新,只有對滿足以下可更新條件的視圖才能進行更新??筛聴l件*: (1)對數據的任何更新(包括UPDATE、INSERT和DELETE語句)都只能引用一個基本表的列。如果視圖數據為一個表的行、列子集,則可更新(包括UPDATE、INSERT和DELETE語句);但如果視圖中包含的列為表定義時不允許取空值又沒有給默認值的列,則此視圖不可以插入數據。 如果視圖所依賴的基本表有多個時,不能向該視圖添加(INSERT)數據。若視圖依賴于多個基本表,那么一次修改只能修改(UPDATE)一個基本表中的數據。若視圖依賴于多個基本表,那么不能通過視圖刪除(DELETE)數據。(2)視圖中被修改的列必須直接引用

18、表列中的基礎數據。不能是通過任何其他方式對這些列進行派生而來的數據,比如通過聚合函數、計算(如表達式計算)、集合運算等。(3)被修改的列不應是在創建視圖時受GROUP BY、HAVING、DISTINCT或TOP子句影響的。注意:有可能插入并不滿足視圖查詢的WHERE子句條件中的一行。為了進行限制此操作,可以在創建視圖時使用WITH CHECK OPTION選項?!纠?-7】通過male_view視圖向student表中插入一個“男”生。INSERT INTO male_view VALUES (1501005, 張三, 男, 19,2015-09-01,電子,15級)如果通過male_vie

19、w視圖向student表中插入一個“女”生,也可以完成插入,如果不想通過male_view視圖插入“女”生,在創建“男生視圖”時應該使用WITH CHECK OPTION選項。8.1.5 刪除視圖在不需要該視圖的時候或想清除視圖定義及與之相關聯的權限時,可以刪除該視圖。視圖的刪除不會影響所依附的基本表的數據,定義在系統表sysahjects、syscolumns、syscomments、sysdepends和sysprotects中的視圖信息也會被刪除。1.在SQL Server Management Studio刪除視圖選中要刪除的視圖,右鍵單擊選擇“刪除”命令,進入“刪除對象”窗口,單擊“

20、確定”按鈕就能刪除視圖 2.在查詢窗口中執行T-SQL語句刪除視圖T-SQL提供了視圖刪除語句DROP VIEW。其語法格式如下:DROP VIEW view_name【例8-8】刪除例8-1創建的s_c_sc。USE teachingGO DROP VIEW s_c_sc GO 8.2 索引索引(Index)是對數據庫表中一個或多個列的值進行排序的結構,其主要目的是提高SQL Server系統的性能,加快數據的查詢速度和減少系統的響應時間。所以,索引就是加快檢索表中數據的方法。8.2.1 索引簡介數據庫的索引就類似于書籍的目錄,如果想快速查找而不是逐頁查找指定的內容,可以通過目錄中章節的頁號

21、找到其對應的內容。類似地,索引通過記錄表中的關鍵值指向表中的記錄,這樣數據庫引擎就不用掃描整個表而定位到相關的記錄。相反,如果沒有索引,則會導致SQL Server搜索表中的所有記錄,以獲取匹配結果。索引包含從表或視圖中一個或多個列生成的鍵,以及映射到指定數據的存儲位置的指針,它是以B+樹結構與表或視圖相關聯的。索引的優點包括:(1)大大加快數據的檢索速度,這是創建索引的最主要的原因。(2)創建唯一性索引,保證表中每一行數據的唯一性。(3)加速表和表之間的連接。 (4)在使用分組和排序子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。 (5)查詢優化器可以提高系統的性能,但它是依靠索

22、引起作用的。 雖然索引具有如此多的優點,但索引的存在也讓系統付出了一定的代價。創建索引和維護索引都會消耗時間,當對表中的數據進行增加、刪除和修改操作時,索引就要進行維護,否則索引的作用就會下降。另外,每個索引都會占用一定的物理空間,如果占用的物理空間過多,就會影響到整個SQL Server系統的性能。8.2.2 索引類型SQL Server 2008支持在表中任何列(包括計算列)上定義索引。索引可以是唯一的,即索引列不會有兩行記錄相同,這樣的索引稱為唯一索引。例如,如果在表中的“姓名”列上創建了唯一索引,則以后輸入的姓名將不能同名。索引也可以是不唯一的,即索引列上可以有多行記錄相同。如果索引是

23、根據單列創建的,這樣的索引稱為單列索引,根據多列組合創建的索引則稱為復合索引。索引的組織方式的不同,可以將索引分為聚集索引和非聚集索引。1. 聚集索引聚集索引會對表和視圖進行物理排序,所以這種索引對查詢非常有效,在表和視圖中只能有一個聚集索引。當建立主鍵約束時,如果表中沒有聚集索引,SQL Server會用主鍵列作為聚集索引鍵。可以在表的任何列或列的組合上建立索引,實際應用中一般為定義成主鍵約束的列建立聚集索引。例如,漢語字典的正文就是一個聚集索引的順序結構。比如,要查“安”字,就可以翻開字典的前幾頁,因為“安”的拼音是“an”,而按拼音排序字典是以字母“a”開頭以“z”結尾的,那么“安”字就

24、自然地排在字典的前部。如果翻完了所有“an”讀音的部分仍然找不到這個字,那么就說明字典中沒有這個字。同樣,如果查“張”字,可以將字典翻到最后部分,因為“張”的拼音是“zhang”。也就是說,字典的正文內容本身就是按照音序排列的,而“漢語拼音音節索引”就可以稱為“聚集索引”。2. 非聚集索引非聚集索引不會對表和視圖進行物理排序。如果表中不存在聚集索引,則表是未排序的。在表或視圖中,最多可以建立250個非聚集索引,或者249個非聚集索引和1個聚集索引。例如,查字典時,不認識的字,就不能按照上面的方法來查找。可以根據“偏旁部首”來查。比如查“張”字,在查部首之后的檢字表中“張”的頁碼是622頁,檢字

25、表中“張”的上面是“弛”字,但頁碼卻是60頁,“張”的下面是“弟”字,頁碼是95頁,正文中這些字并不是真正的分別位于“張”字的上下方。所以,現在看到的連續的“弛、張、弟”三字實際上是他們在非聚集索引中的排序,是字典正文中的字在非聚集索引中的映射。這種方式來找到所需要的字要兩個過程,先找到目錄中的結果,然后再翻到所需要的頁碼。這種目錄純粹是目錄,正文純粹是正文的排序方式就稱為“非聚集索引”。聚集索引和非聚集索引都可以是唯一的索引。因此,只要列中數據是唯一的,就可在同一個表上創建一個唯一的聚集索引。如果必須實施唯一性以確保數據的完整性,則應在列上創建UNIQUE或PRIMARY KEY約束,而不要

26、創建唯一索引。創建PRIMARY KEY或UNIQUE約束會在表中指定的列上自動創建唯一索引。創建UNIQUE約束與手動創建唯一索引沒有明顯的區別,進行數據查詢時,查詢方式相同,而且查詢優化器不區分唯一索引是由約束創建還是手動創建的。如果存在重復的鍵值,則無法創建唯一索引和PRIMARY KEY或UNIQUE約束。如果是復合的唯一索引,則該索引可以確保索引列中每個組合都是唯一的,創建復合唯一索引可為查詢優化器提供附加信息,所以對多列創建復合索引時最好是唯一索引。8.2.3 創建索引我們已經知道,創建索引雖然可以提高查詢速度,但是它需要犧牲一定的系統性能。因此,在創建時,哪些列適合創建索引,哪些

27、列不適合創建索引,需要進行詳細的考察。1.創建索引時應考慮的問題(1)對一個表中建大量的索引,應進行權衡。對于SELECT查詢,大量索引可以提高性能,可以從中選擇最快的查詢方法;但是,會影響INSERT、UPDATE和DELETE語句的性能,因為對表中的數據進行修改時,索引也要動態的維護,維護索引耗費的時間會隨著數據量的增加而增加,所以應避免對經常更新的表建立過多的索引,而對更新少而且數據量大的表創建多個索引,可以大大提高查詢性能。(2)對于小型表(行數較少)進行索引可能不會產生優化效果。(3)很少在查詢中使用的列以及值很少的列不應考慮建索引。(4)對于主鍵和外鍵列應考慮建索引,因為經常通過主

28、鍵查詢數據,而外鍵用于表間的連接。(5)視圖中如果包含聚集函數或連接時,創建視圖的索引可以顯著提升查詢性能。2通過SQL Server Management Studio創建索引在SQL Server Management Studio中使用向導創建索引是一種圖形界面環境下最快捷的創建方式,其步驟如下:(1)在SQL Server Management Studio的“對象資源管理器”面板中,選擇要創建索引的表(如teaching中的學生表),然后展開學生表前面的“+”號,選中“索引”選頂右擊,在彈出的快捷菜單中選擇“新建索引”命令 。(2)選擇“新建索引”命令,進入 “新建索引”窗口。在“常

29、規”選項窗口中,可以創建索引,在“索引名稱”文本框中輸入索引名稱,在“索引類型”下拉列表中選擇是不是聚集索引,在“唯一索引”單選框中選擇是否設置唯一索引等。例如,輸入索引名稱為“index_姓名”,選擇“非聚集”選項。(3)通過選擇索引設置按鈕,可以為新建的索引添加、刪除、移動索引列。例如,選擇“添加”按鈕,進入 “添加索引列”窗口,選中“姓名”列前的多選按鈕,單擊“確定”按鈕即可添加一個按“姓名”列升序排序的非聚集索引。再選擇“確定”按鈕,索引創建完成。(4)索引創建完成后,在SQL Server Management Studio的“對象資源管理器”面板中,選擇創建了索引的表(學生表),展

30、開學生表前面的“+”號,再展開“索引”選頂前面的“+”號,就會出現新建的索引“index_sname” 。3.利用T-SQL語句創建索引使用T-SQL語句創建索引的語法格式如下:CREATE UNIQUE CLUSTERED | NONCLUSTERED INDEX index_name ON table_name | view_name ( column_name ASC | DESC ,.n ) WITH ,.n ON filegroup := PAD_INDEX | FILLFACTOR = fillfactor |IGNORE_DUP_KEY | DROP_EXISTING |STAT

31、ISTICS_NORECOMPUTE 【例8-9】根據teaching中學生表的姓名列的升序創建一個名為“index_sname”的普通索引。USE teachingGOCREATE INDEX index_sname ON student(sname)【例8-10】根據inventory數據庫中goods表的商品名稱、生產商創建一個名為goods_producer的唯一性復合索引,其中商品名稱為升序,生產商為降序。USE inventoryGOCREATE UNIQUE INDEX goods_producerON goods(gname ASC, producer DESC)4.間接創建索

32、引在定義表結構或修改表結構時,如果定義了主鍵約束(PRAMARY KEY)或者唯一性約束(UNIQUE),可以間接創建索引?!纠?-11】創建一個stuednt1表,并定義了主鍵約束。USE teachingGOCREATE TABLE stuednt1(sno char(6) PRAMARY KEY,sname nvarchar(10) )此例中,就按sno升序創建了一個聚集索引。【例8-12】創建一個teacher表,并定義了主鍵約束和唯一性約束。USE teachingGOCREATE TABLE teacher(tno char(6) PRAMARY KEY,tname nvarcha

33、r(10) UNIQUE )此例中,創建了兩個索引,按tno升序創建了一個聚集索引,按tname升序創建了一個非聚集唯一索引。索引一經創建,就完全有系統自動選擇和維護,不需要用戶指定使用索引,也不需要用戶執行打開索引或進行重新索引等操作,所有的工作都由SQL Server數據庫管理系統自動完成的。5.創建索引視圖視圖也稱為虛擬表,這是因為由視圖返回的結果集其一般格式與由列和行組成的表相似,并且,在 SQL 語句中引用視圖的方式也與引用表的方式相同。對于標準視圖而言,結果集不是永久地存儲在數據庫中,為每個引用視圖的查詢動態生成結果集的開銷很大,特別是對于那些涉及對大量行進行復雜處理(如聚合大量數

34、據或連接許多行)的視圖更為可觀。若經常在查詢中引用這類視圖,可通過在視圖上創建唯一聚集索引來提高性能。在視圖上創建唯一聚集索引時將執行該視圖,并且結果集在數據庫中的存儲方式與帶聚集索引的表的存儲方式相同。在視圖上創建索引的另一個好處是:查詢優化器開始在查詢中使用視圖索引,而不是直接在 FROM 子句中命名視圖。這樣一來,可從索引視圖檢索數據而無需重新編碼,由此帶來的高效率也使現有查詢獲益。在視圖上創建聚集索引可存儲創建索引時存在的數據。索引視圖還自動反映自創建索引后對基表數據所做的更改,這一點與在基表上創建的索引相同。當對基表中的數據進行更改時,索引視圖中存儲的數據也反映數據更改。視圖的聚集索

35、引必須唯一,從而提高了SQL Server 在索引中查找受任何數據更改影響的行的效率。與基本表上的索引相比,對索引視圖的維護可能更復雜。只有當視圖的結果檢索速度的效益超過了修改所需的開銷時,才應在視圖上創建索引。這樣的視圖通常包括映射到相對靜態的數據上、處理多行以及由許多查詢引用的視圖。在視圖上創建的第一個索引必須是唯一聚集索引。在創建唯一聚集索引后,可創建其它非聚集索引。視圖上的索引命名規則與表上的索引命名規則相同??梢栽赟QL Server Management Studio的對象資源管理器,展開相應數據庫文件夾,展開“視圖”選項,再展開要創建索引的視圖,右擊“索引”選項選擇“新建索引”命

36、令。例如,假定男生視圖符合創建聚集索引的要求,按學號的升序為男生視圖創建一個唯一的聚集索引,在“新建索引”對話框內輸入索引名,設置索引類型,單擊“確定”按鈕即可新建一個索引視圖。 也可以使用T-SQL語句創建索引視圖。【例8-13】創建一個female_view視圖,并為該視圖按sno升序創建一個具有唯一性的聚集索引。創建視圖:USE teachingGOCREATE VIEW female_viewWITH SCHEMABINDINGASSELECT sno,sname,ssex,specialty FROM dbo.studentWHERE ssex= 女創建索引:CREATE UNIQU

37、E CLUSTERED INDEX index_female ON female_view(sno)創建聚集索引后,對于任何試圖為視圖修改基本數據而進行的連接,其選項設置必須與創建索引所需的選項設置相同。如果這個執行語句的連接沒有適當的選項設置,則 SQL Server 生成錯誤并回滾任何會影響視圖結果集的 INSERT、UPDATE 或 DELETE 語句。有關更多信息,請參見影響結果的 SET 選項。若除去視圖,視圖上的所有索引也將被除去。若除去聚集索引,視圖上的所有非聚集索引也將被除去。可分別除去非聚集索引。除去視圖上的聚集索引將刪除存儲的結果集,并且優化器將重新象處理標準視圖那樣處理視圖。盡管 CREATE UNIQUE CLUSTERED INDEX 語句僅指定組成聚集索引鍵的列,但視圖的完整結果集將存儲在數據庫中。與基表上的聚集索引一樣,聚集索引的B+樹結構僅包含鍵列,但數據行包含視圖結果集中的所有列。若想為現有系統中的視圖添加索引,必須計劃綁定任何想要放入索引的視圖??梢猿ヒ晥D并通過指定 WITH SCHEMABINDING 重新創建它;也可以創建另一個

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論