標籤:使用 io ar 資料 問題 on ad ef c
在視圖上建立索引的另一個好處是:查詢最佳化工具開始在查詢中使用視圖索引,而不是直接在 FROM 子句中命令視圖。這樣一來,可從索引檢視表檢索資料而無需重新編碼,由此帶來的高效率也使常設查詢獲益。在視圖上建立的第一個索引必須是唯一叢集索引。在建立唯一叢集索引後,可建立其它非叢集索引。視圖上的索引命名規則與表上的索引命名規則相同。唯一區別是表名由視圖名替換。(Sql Server線上說明)
沒研究過,說不出什麼東西來,現在只把方法記下來。
語句:
Create VIEW vXXX WITH SCHEMABINDING AS……
Create UNIQUE CLUSTERED INDEX idxXXX ON vXXX(cXXX)
一個標準視圖轉換為一個索引檢視表必須遵守以下規則:
A.視圖必須使用With Schemabinding選項來建立;
如果建立視圖時沒有with Schemabinding,試圖建立視圖時就會報錯:……因為該視圖未綁定到架構
B.在這個視圖中不能使用其他視圖、匯出表、行集合函式或自查詢,也就是說只能使用表;
C.視圖所用到的基本表必須和視圖屬於同一個所有者;
D.視圖只能連結同一個資料庫中的表;
E.視圖不能包含一個外部連結或自連結,也就是說在連結資料表時只能使用INNER JOIN並且INNER JOIN前後不能使同一個表,不能使用LEFT(RIGHT) JOIN 或者 LEFT (RIGHT) OUTER JOIN ;
F. 視圖不能包含UNION子句、TOP子句、ORDER BY子句、Having子句、Rollup子句、Cube子句、compute子句、Compute By子句或Distinct關鍵字;
G. 視圖不允許使用某些集合函數,如:Count(*)可以使用count_big(*)代替、avg()、max()、min()、stdev()、stdevp()、var()或varp()等;
H. 視圖不能使用Select * 這樣的語句,也就是說視圖的所有欄位都必須顯示指定;
I. 視圖不能包含Text、ntext、image類型的列;
J. 如果視圖包含一個Group By子句,那麼他必須在Select列中包含count_big(*);
K. 視圖中的所有標和使用者自訂的函數都必須使用兩段式名來引用,即所有者.表或函數名稱;
L. 所有的基本表和視圖都必須使用 Set Ansi_Nulls On 建立;
M. 在建立索引時或建立索引後執行IUD時,必須顯示或隱式地執行:
Set ANSI_NULLS ON
SET ANSI_PADDING ON
SET ANSI_WARNINGS ON
SET ARITHABORT ON
SET CONCAT_NULL_YIELDS_NULL ON
SET QUOTED_IDENTIFIER ON
SET NUMERIC_ROUNDABORT OFF
各個選項的有關資訊或意義,可以查閱SQL Server的聯機叢書,這裡就不再介紹了;
N. 索引檢視表只有在SQL Server2000的企業版或開發版或者更高的版本中才能建立。
在一個表上建立了索引檢視表後,對其執行delete操作時報錯:Delete 失敗,因為下列 SET 選項的設定不正確: ‘CONCAT_NULL_YIELDS_NULL, ANSI_PADDING,ARITHABORT‘,刪除這個視圖問題就解決了
SQL Server 視圖索引