在上述的文章中我們講到,SQL SERVER視圖其實就是一段SQL語句,在視圖被調用時動態執行定義的SQL,返回結果集。
在SQL Server2005後,微軟推出了索引檢視表,索引檢視表與之前的普通視圖有一個本質的區別,就是索引檢視表中的結果集是儲存在資料庫中的,而不是每次動態執行的結果。這樣,查詢時就可以像查詢基礎資料表一樣,效能得到不少的提升。我們還可以在索引檢視表上建立索引,讓索引檢視表的效能得到進一步提升。
那麼,要如何建創索引檢視表呢?我們可以通過關鍵字SchemaBinding來建立,例句如下:
create view v_salary with Schemabinding as select name,salary from dbo.Salary
在建立索引檢視表的時候,我們要注意以下幾點: 1,在索引檢視表中,不能使用*號,必具指定所有結果集中的列名。 我們試圖在其實使用*號:
create view v_ss_salary with Schemabinding as select * from dbo.Salary
報錯:在綁定到架構的對象中不允許使用文法 '*'。
2,在索引檢視表中,所有用到的表前都必須加表所屬的架構dbo。 我們試圖在表前不加dbo:
create view v_salary with Schemabinding as select name,salary from Salary
報錯:無法將 視圖'v_salary' 綁定到架構,因為名稱'Salary'對於架構綁定無效。名稱必須由兩部分構成,並且對象不能引用自身。
3,在索引檢視表中不能有重複的列(其實在普通視圖中也有該限制) 我們試圖在視圖中建立重複的列:
create view v_salary with Schemabinding as select name,name from dbo.Salary
報錯:各視圖或函數中的列名必須唯一。在視圖或函數 'v_salary ' 中多次指定了列名 'name'。
4,在索引檢視表中只能建立唯一叢集索引。 我們試圖在索引檢視表上建立叢集索引:
create clustered index IX_name on v_salary(name)
報錯:無法對視圖'v_salary'建立索引,它沒有唯一叢集索引
正確的建立語句如下:
create unique clustered index IX_name on v_salary(name)
假設v_salary是普通視圖,如果我們為它建立索引,會報如下錯誤: 無法對視圖v_salary建立索引,因為該視圖未綁定到架構
刪除索引檢視表: ·刪除索引檢視表的方法與刪除普通視圖的方法一樣,在SQL Server Management Studio中,選中要刪除的視圖,點擊右鍵菜單中的"刪除"命令即可。 ·使用SQL語句刪除方法如下:
drop view 視圖名