視圖就是為了方便查看數據,比如說一個表有幾千個欄位,但常用的就那麼十來個,我就可以把那十來個歸集未一個視圖,省得查詢表要找來找去的麻煩,再比如說學生表和教師表,我要知道哪個學生是由那個教師教的,就要兩個表關鄭前聯起來看,為了方便我可以直接把他們做成一張視圖,查詢視圖就都出來了。索引就相當於給數據打個編號,用來提高效率的賀敬,當然要用對才有效果。存儲過程就是用來處理數據,事物等的一個邏輯集合,比如一個存儲過程接收到一個參數用戶出生時間20020601,但在表中要存注冊時間,用戶年齡,用戶生日,就可以在存儲過程中將注冊時間:當前時間,用戶年齡禪叢慎 :當前時間-出生時間,用戶生日:截取月份和號數這些數據處理後再存入到表
B. 如何創建sqlServer視圖的索引
在視圖上創建索引的另一個好處是:查詢優化器開始在查詢中使用視圖索引,而不是直接在 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',刪除這個視圖問題就解決了
以上是轉載自CSDN
C. SQL Server裡面什麼樣的視圖才能創建索引
在為視圖創建索引前,視圖本身必須滿足以下條件: 1、視圖以及視圖中引用的所有表都必須在同一資料庫中,並具有同一個所有者。 2、索引視圖無需包含要供優化器使用的查詢中引用的所有表。 3、必須先為視圖創建唯一群集索引,然後才可以創建其它索引。 4、創建基表、視圖和索引以及修改基表和視圖中的數據時,必須正確設置某些 SET 選項(在本文檔的後文中討論)。另外,如果這些 SET 選項正確,查詢優化器將不考慮索引視圖。 5、視圖必須使用架構綁定創建,視圖中引用的任何用戶定義的函數必須使用 SCHEMABINDING 選項創建。 6、另外,還要求有一定的磁碟空間來存放由索引視圖定義的數據。
D. 怎樣為視圖建立索引
必須使用 SCHEMABINDING 定義視圖才能在視圖上創建索引。視圖定義滾者也必須具有確定性。如果選擇列表中的所有表達式、大仿薯WHERE 和 GROUP BY 子句都具有確定性,則視圖也具有確定性。而且,所有鍵列必須是精確的。只有視圖的非鍵列可能包含浮點表達式(使用 float 數據類型的表達式),而且 float 表達式不能在視圖定義的其它任何位置使用。
若要在確定性視圖中查找列大旦,請使用 COLUMNPROPERTY 函數(IsDeterministic 屬性)。該函數的 IsPrecise 屬性可用來確定鍵列是否精確。
必須先為視圖創建唯一的聚集索引,才能為該視圖創建非聚集索引。
指定 SCHEMABINDING 時,select_statement 必須包含所引用的表、視圖或用戶定義函數的兩部分名稱 (owner.object)。
不能除去參與用架構綁定子句創建的視圖中的表或視圖,除非該視圖已被除去或更改,不再具有架構綁定。否則,SQL Server 會產生錯誤。另外,如果對參與具有架構綁定的視圖的表執行 ALTER TABLE 語句,而這些語句又會影響該架構綁定視圖的定義,則這些語句將會失敗!
E. 資料庫基礎詳解:存儲過程、視圖、游標、SQL語句優化以及索引
寫在文章前:本系列文章用於博主自己歸納復習一些基礎知識,同時也分享給可能需要的人,因為水平有限,肯定存在諸多不足以及技術性錯誤,請大佬們及時指正。
存儲過程 是事先經過編譯並存儲在資料庫中的一段SQL語句的集合。想要實現相應的功能時,只需要調用這個存儲過程就行了(類似於函數,輸入具有輸出參數)。
優點 :
缺點 :
Delete用來刪除表的全部或者部分數據,執行delete之後,用戶需要提交之後才會執行,會觸發表上的DELETE觸發器(包含一個OLD的虛擬表,可以只讀訪問被刪除的數據),DELETE之後表結構還在,刪除很慢,一行一行地刪,因為會記錄日誌,可以利用日誌還原數據;
Truncate刪除表中的所有數據,這個操作不能回滾,也不會觸發這個表上的觸發器。操作比DELETE快很多(直接把表drop掉,再創建一個新表,刪除的數據不能找回)。如果表中有自增(AUTO_INCREMENT)列,則重置為1。
Drop命令從資料庫中刪除表,所有的數據行,索引和約束都會被刪除。不能回滾,不會觸發觸發器。
觸發器(TRIGGER)是由事件(比如INSERT/UPDATE/DELETE)來觸發運行的操作(不能被直接調用,不能接收參數)。在資料庫里以獨立的對象存儲,用於保證數據完整性(比如可以檢驗或轉換數據)。
約束(Constraint)類型:
從資料庫的基本表中通過查詢選取出來的數據組成的虛擬表(資料庫中只存放視圖的定義,而不存放視圖的數據)。可以對其進行增/刪/改/查等操作。視圖是對若干張基本表的引用,一張虛表,查詢語句執行的結果,不存儲具體的數據(基本表數據發生了改變,視圖也會跟著改變)。
可以跟基本表一樣,進行增刪改查操作( 增刪改操作有條件限制,一般視圖只允許查詢操作 ),對視圖的增刪改也會影響原表的數據。 它就像一個窗口,透過它可以看到資料庫中自己感興趣的數據並且操作它們。 好處:
用於定位在查詢返回的結果集的特定行,以對特定行進行操作。使用游標可以方便地對結果集進行移動遍歷,根據需要滾動或對瀏覽/修改任意行中的數據。主要用於互動式應用。它是一段私有的SQL工作區,也就是一段內存區域,用於暫時存放受SQL語句影響的數據,簡單來說,就是將受影響的數據暫時放到了一個內存區域的虛表當中,這個虛表就是游標。
游標是一種能從包括多條數據記錄的結果集中每次提取一條記錄的機制。即游標用來逐行讀取結果集。游標充當指針的作用。盡管游標能遍歷結果中的所有行,但他一次只指向一行。
游標的一個常見用途就是保存查詢結果,以便以後使用。游標的結果集是由SELECT語句產生,如果處理過程需要重復使用一個記錄集,那麼創建一次游標而重復使用若干次,比重復查詢資料庫要快的多。通俗來說,游標就是能在sql的查詢結果中,顯示某一行(或某多行)數據,其查詢的結果不是數據表,而是已經查詢出來的結果集。
簡單來說:游標就是在查詢出的結果集中進行選擇性操作的工具。
讓緩存更高效。對於連接查詢,如果其中一個表發生變化,那麼整個查詢緩存就無法使用。而分解後的多個查詢,即使其中一個表發生變化,對其它表的查詢緩存依然可以使用。分解成多個單表查詢,這些單表查詢的緩存結果更可能被其它查詢使用到,從而減少冗餘的查詢。減少鎖競爭。
索引是對資料庫表中一列或多列的值進行排序的一種結構(說明是在列上建立的),使用索引可快速訪問資料庫表中的特定信息。如果想按特定職員的姓來查找他或她,則與在表中搜索所有的行相比,索引有助於更快地獲取信息。索引的一個主要目的就是加快檢索表中數據,亦即能協助信息搜索者盡快的找到符合限制條件的記錄ID的輔助數據結構。
當表中有大量記錄時,若要對表進行查詢,第一種搜索信息方式是全表搜索,是將所有記錄一一取出,和查詢條件進行一一對比,然後返回滿足條件的記錄,這樣做會消耗大量資料庫系統時間,並造成大量磁碟I/O操作。第二種就是在表中建立索引,然後在索引中找到符合查詢條件的索引值,最後通過保存在索引中的ROWID(相當於頁碼)快速找到表中對應的記錄。
例如這樣一個查詢:select * from table1 where id=10000。如果沒有索引,必須遍歷整個表,直到ID等於10000的這一行被找到為止。有了索引之後(必須是在ID這一列上建立的索引),即可在索引中查找。由於索引是經過某種演算法優化過的,因而查找次數要少的多。可見,索引是用來定位的。
從應用上分, 主鍵索引(聚集) , 唯一索引(聚集/非聚集) , 普通索引 , 組合索引 , 單列索引和全文索引
F. 資料庫中創建視圖和索引還有存儲過程起什麼作用
視圖可以被看成是虛擬表或存儲查詢。可通過視圖訪問的數據不作為獨特的對象存儲在資料庫內。資料庫內存儲的是 SELECT 語句。SELECT 語句的結果集構成視圖所返回的虛擬表。用戶可以用引用表時所使用的方法,在 Transact-SQL 語句中通過引用視圖名稱來使用虛擬表。使用視圖可以實現下列任一或所有功能:
將用戶限定在表中的特定行上。
例如,只允許雇員看見工作跟蹤表內記錄其工作的行。
將用戶限定在特定列上。
例如,對於那些不負責處理工資單的雇員,只允許他們看見雇員表中的姓名列、辦公室列、工作電話列和部門列,而不能看見任何包含工資信息或個人信息的列。
將多個表中的列聯接起來,使它們看起來象一個表。
聚合信息而非提供詳細信息。
例如,顯示一個列的和,或列的最大值和最小值。
------------------
資料庫中的索引與書籍中的索引類似。在一本書中,利用索引可以快速查找所需信息,無須閱讀整本書。在資料庫中,索引使資料庫程序無須對整個表進行掃描,就可以在其中找到所需數據。
------------------
存儲過程可以使得對資料庫的管理、以及顯示關於資料庫及其用戶信息的工作容易得多。存儲過程是 SQL 語句和可選控制流語句的預編譯集合,以一個名稱存儲並作為一個單元處理。存儲過程存儲在資料庫內,可由應用程序通過一個調用執行,而且允許用戶聲明變數、有條件執行以及其它強大的編程功能。
存儲過程可包含程序流、邏輯以及對資料庫的查詢。它們可以接受參數、輸出參數、返回單個或多個結果集以及返回值。
可以出於任何使用 SQL 語句的目的來使用存儲過程,它具有以下優點:
可以在單個存儲過程中執行一系列 SQL 語句。
可以從自己的存儲過程內引用其它存儲過程,這可以簡化一系列復雜語句。
存儲過程在創建時即在伺服器上進行編譯,所以執行起來比單個 SQL 語句快。
G. 求解,關於SQL給表創建索引和視圖的問題,各位幫幫忙
索引的使用是資料庫自動完成的,不需要特別調用!使用索引可以加快查詢速度,可以參考以下的網路說明:
使用索引可快速訪問表中的特定信息。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓(name)列。如果要按姓查找特定職員,與必須搜索表中的所有行相比,索引會幫助您更快地獲得該信息。
在關系資料庫中,索引是一種與表有關的資料庫結構,它可以使對應於表的SQL語句執行得更快。索引的作用相當於圖書的目錄,可以根據目錄中的頁碼快速找到所需的內容。當表中有大量記錄時,若要對表進行查詢,第一種搜索信息方式是全表搜索,是將所有記錄一一取出,和查詢條件進行一一對比,然後返回滿足條件的記錄,這樣做會消耗大量資料庫系統時間,並造成大量磁碟I/O操作;第二種就是在表中建立索引,然後在索引中找到符合查詢條件的索引值,最後通過保存在索引中的ROWID(相當於頁碼)快速找到表中對應的記錄。
索引是一個單獨的、物理的資料庫結構,它是某個表中一列或若干列值的集合和相應的指向表中物理標識這些值的數據頁的邏輯指針清單。
索引提供指向存儲在表的指定列中的數據值的指針,然後根據您指定的排序順序對這些指針排序。資料庫使用索引的方式與您使用書籍中的索引的方式很相似:它搜索索引以找到特定值,然後順指針找到包含該值的行。
在資料庫關系圖中,您可以在選定表的「索引/鍵」屬性頁中創建、編輯或刪除每個索引類型。當保存索引所附加到的表,或保存該表所在的關系圖時,索引將保存在資料庫中。
一般資料庫在建立時的默認索引是主鍵,但是在使用查詢過程中有些欄位往往作為經常的檢索條件,比方說入庫時間、姓名、種類等。如果不基於主鍵的查詢經常發生的話,在這些查詢欄位上建立索引可以加快查詢速度,提交程序的反應性能!
對於視圖,一個是簡單方便查詢,同時也提高安全性,可參考網路介紹
* 簡單性。看到的就是需要的。視圖不僅可以簡化用戶對數據的理解,也可以簡化他們的操作。那些被經常使用的查詢可以被定義為視圖,從而使得用戶不必為以後的操作每次指定全部的條件。
* 安全性。通過視圖用戶只能查詢和修改他們所能見到的數據。資料庫中的其它數據則既看不見也取不到。資料庫授權命令可以使每個用戶對資料庫的檢索限制到特定的資料庫對象上,但不能授權到資料庫特定行和特定的列上。通過視圖,用戶可以被限制在數據的不同子集上:
使用許可權可被限制在另一視圖的一個子集上,或是一些視圖和基表合並後的子集上。
* 邏輯數據獨立性。視圖可幫助用戶屏蔽真實表結構變化帶來的影響。
H. 索引怎麼建立使用
Create Relational Index
CREATE [ UNIQUE ] [ CLUSTERED | NONCLUSTERED ] INDEX index_name
ON <object> ( column [ ASC | DESC ] [ ,...n ] )
[ INCLUDE ( column_name [ ,...n ] ) ]
[ WHERE <filter_predicate> ]
[ WITH ( <relational_index_option> [ ,...n ] ) ]
[ ON { partition_scheme_name ( column_name )
| filegroup_name
| default
}
]
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
參數
UNIQUE
為表或視圖創建唯一索引。唯一索引不允許兩行具有相同的索引鍵值。視圖的聚集索引必須唯一。
無論 IGNORE_DUP_KEY 是否設置為 ON,資料庫引擎都不允許為已包含重復值的列創建唯一索引。否則,資料庫引擎會顯示錯誤消息。必須先刪除重復值,然後才能為一列或多列創建唯一索引。唯一索引中使用的列應設置為 NOT NULL,因為在創建唯一索引時,會將多個 Null 值視為重復值。
CLUSTERED
創建索引時,鍵值的邏輯順序決定表中對應行的物理順序。聚集索引的底層(或稱葉級別)包含該表的實際數據行。一個表或視圖只允許同時有一個聚集索引。
具有唯一聚集索引的視圖稱為索引視圖。為一個視圖創建唯一聚集索引會在物理上具體化該視圖。必須先為視圖創建唯一聚集索引,然後才能為該視圖定義其他索引。
在創建任何非聚集索引之前創建聚集索引。創建聚集索引時會重新生成表中現有的非聚集索引。
如果沒有指定 CLUSTERED,則創建非聚集索引。
注意:
因為按照定義,聚集索引的葉級別與其數據頁相同,所以創建聚集索引和使用 ON partition_scheme_name 或 ON filegroup_name 子句實際上會將表從創建該表時所在的文件組移到新的分區方案或文件組中。對特定的文件組創建表或索引之前,應確認哪些文件組可用並且有足夠的空間供索引使用。
NONCLUSTERED
創建一個指定表的邏輯排序的索引。對於非聚集索引,數據行的物理排序獨立於索引排序。
無論是使用 PRIMARY KEY 和 UNIQUE 約束隱式創建索引,還是使用 CREATE INDEX 顯式創建索引。每個表都最多可包含 999 個非聚集索引。
對於索引視圖,只能為已定義唯一聚集索引的視圖創建非聚集索引。
默認值為 NONCLUSTERED。
index_name
索引的名稱。索引名稱在表或視圖中必須唯一,但在資料庫中不必唯一。索引名稱必須符合標識符的規則。
column
索引所基於的一列或多列。指定兩個或多個列名,可為指定列的組合值創建組合索引。在 table_or_view_name 後的括弧中,按排序優先順序列出組合索引中要包括的列。
一個組合索引鍵中最多可組合 16 列。組合索引鍵中的所有列必須在同一個表或視圖中。組合索引值允許的最大大小為 900 位元組。
不能將大型對象 (LOB) 數據類型 ntext、text、varchar(max)、 nvarchar(max)、varbinary(max)、xml 或 image 的列指定為索引的鍵列。另外,即使 CREATE INDEX 語句中並未引用 ntext、text 或 image 列,視圖定義中也不能包含這些列。
如果 CLR 用戶定義類型支持二進制排序,則可以為該類型的列創建索引。另外,對於已定義為用戶定義類型列的方法調用的計算列,只要這些方法標記為確定性方法且不執行數據訪問操作,便可為該計算列創建索引。
[ ASC | DESC ]
確定特定索引列的升序或降序排序方向。默認值為 ASC。
INCLUDE ( column [ ,...n ] )
指定要添加到非聚集索引的葉級別的非鍵列。非聚集索引可以唯一,也可以不唯一。
在 INCLUDE 列表中列名不能重復,且不能同時用於鍵列和非鍵列。
除 text、ntext 和 image 之外,允許所有數據類型。如果指定的任一非鍵列屬於 varchar(max)、nvarchar(max) 或 varbinary(max) 數據類型,則必須離線 (ONLINE = OFF) 創建或重新生成該索引。
精確或不精確的確定性計算列都可以是包含列。從 image、ntext、text、varchar(max)、nvarchar(max)、varbinary(max) 和 xml 數據類型派生的計算列可以包含在非鍵列中,前提是允許將這些計算列數據類型作為包含列。
WHERE <filter_predicate>
通過指定索引中要包含哪些行來創建篩選索引。篩選索引必須是對表的非聚集索引。為篩選索引中的數據行創建篩選統計信息。
篩選謂詞使用簡單比較邏輯且不能引用計算列、UDT 列、空間數據類型列或 hierarchyID 數據類型列。比較運算符不允許使用 NULL 文本的比較。請改用 IS NULL 和 IS NOT NULL 運算符。
下面是 Proction.BillOfMaterials 表的篩選謂詞的一些示例:
WHERE StartDate > '20000101' AND EndDate <= '20000630'
WHERE ComponentID IN (533, 324, 753)
WHERE StartDate IN ('20000404', '20000905') AND EndDate IS NOT NULL
篩選索引不適用於 XML 索引和全文索引。對於 UNIQUE 索引,僅選定的行必須具有唯一的索引值。篩選索引不允許有 IGNORE_DUP_KEY 選項。
ON partition_scheme_name ( column_name )
指定分區方案,該方案定義要將分區索引的分區映射到的文件組。必須通過執行 CREATE PARTITION SCHEME 或 ALTER PARTITION SCHEME,使資料庫中存在該分區方案。column_name 指定將作為分區索引的分區依據的列。該列必須與 partition_scheme_name 使用的分區函數參數的數據類型、長度和精度相匹配。column_name 不限於索引定義中的列。除了在對 UNIQUE 索引分區時,必須從用作唯一鍵的列中選擇 column_name 外,還可以指定基表中的任何列。通過此限制,資料庫引擎可驗證單個分區中的鍵值唯一性。
注意:
在對非唯一的聚集索引進行分區時,如果尚未指定分區依據列,則默認情況下資料庫引擎將在聚集索引鍵列表中添加分區依據列。在對非唯一的非聚集索引進行分區時,如果尚未指定分區依據列,則資料庫引擎會添加分區依據列作為索引的非鍵(包含)列。
如果未指定 partition_scheme_name 或 filegroup 且該表已分區,則索引會與基礎表使用相同分區依據列並被放入同一分區方案中。
有關將索引分區的詳細信息,請參閱已分區索引的特殊指導原則。
ON filegroup_name
為指定文件組創建指定索引。如果未指定位置且表或視圖尚未分區,則索引將與基礎表或視圖使用相同的文件組。該文件組必須已存在。
ON "default"
為默認文件組創建指定索引。
在此上下文中,「default」不是關鍵字。它是默認文件組的標識符,並且必須進行分隔(類似於 ON "default" 或 ON[default])。如果指定了 "default",則當前會話的 QUOTED_IDENTIFIER 選項必須為 ON。這是默認設置。
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
在創建聚集索引時,指定表的 FILESTREAM 數據的位置。FILESTREAM_ON 子句用於將 FILESTREAM 數據移動到不同的 FILESTREAM 文件組或分區方案。
filestream_filegroup_name 是 FILESTREAM 文件組的名稱。該文件組必須包含一個使用 CREATE DATABASE 或 ALTER DATABASE 語句為該文件組定義的文件;否則,將引發錯誤。
如果表已分區,則必須包含 FILESTREAM_ON 子句並且必須指定 FILESTREAM 文件組的分區方案,且此分區方案需使用與該表分區方案相同的分區函數和分區列。否則將引發錯誤。
如果該表未分區,則無法對 FILESTREAM 列分區。該表的 FILESTREAM 數據必須存儲在一個由 FILESTREAM_ON 子句指定的文件組中。
如果創建的是聚集索引且該表不包含 FILESTREAM 列,則可在 CREATE INDEX 語句中指定 FILESTREAM_ON NULL。
I. mssql 視圖能不能創建索引,帶子查詢的視圖能不能創建索引,如何創建
消息提示已經給你答案了,你可以考慮用表連接代替子查詢。
以下是在視圖上建索引的規則,無法改變的:
定義索引視圖的SELECT語句不得包含TOP、DISTINCT、COMPUTE、HAVING和UNION關鍵字。也不能包含子查詢。
SELECT列表中不得包派皮謹含握野星號(*)、'table.*'通配符列表、DISTINCT、COUNT(*)、COUNT(<expression>)、基表中的計算列和標量聚合。
非聚合SELECT列表中不能包含表達式。聚合SELECT列表(包含GROUPBY的查詢)中可能包含SUM和COUNT_BIG(<expression>);它一定包含COUNT_BIG(*)。不允許有其它聚合函數(MIN、MAX、STDEV,...)。
使用AVG的復雜聚合無法參與索引視圖的SELECT列表。不過,如果查詢使用這樣的聚合,則優化程序將能使用該索引視圖,用SUM和COUNT_BIG的簡單聚合組合代替AVG。
若某列是從取值為float數據類型或使用float表達式進行取值的表達式得到的,塵基則不能作為索引視圖或表中計算列的索引鍵。這樣的列被視為是不精確的。使用COLUMNPROPERTY函數決定特定計算列或視圖中的列是否精確。
索引視圖受限於以下的附加限制:
索引的創建者必須擁有表。所有表、視圖和索引必須在同一資料庫中創建。
定義索引視圖的SELECT語句不得包含視圖、行集函數、行內函數或派生表。同一物理表在該語句中只能出現一次。
在任何聯接表中,均不允許進行OUTERJOIN操作。
搜索條件中不允許使用子查詢或者CONTAINS或FREETEXT謂詞。