如何創(chuàng)建SqlServer視圖的索引
創(chuàng)新互聯(lián)專注于溫江企業(yè)網(wǎng)站建設(shè),響應(yīng)式網(wǎng)站開發(fā),商城網(wǎng)站建設(shè)。溫江網(wǎng)站建設(shè)公司,為溫江等地區(qū)提供建站服務(wù)。全流程按需設(shè)計(jì)網(wǎng)站,專業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)專業(yè)和態(tài)度為您提供的服務(wù)
這樣一來,可從索引視圖檢索數(shù)據(jù)而無需重新編碼,由此帶來的高效率也使現(xiàn)有查詢獲益。在視圖上創(chuàng)建的第一個(gè)索引必須是唯一聚集索引。在創(chuàng)建唯一聚集索引后,可創(chuàng)建其它非聚集索引。視圖上的索引命名規(guī)則與表上的索引命名規(guī)則相同。唯一區(qū)別是表名由視圖名替換。(Sql Server聯(lián)機(jī)幫助)
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" } ]
參數(shù)
UNIQUE
為表或視圖創(chuàng)建唯一索引。唯一索引不允許兩行具有相同的索引鍵值。視圖的聚集索引必須唯一。
無論 IGNORE_DUP_KEY 是否設(shè)置為 ON,數(shù)據(jù)庫引擎都不允許為已包含重復(fù)值的列創(chuàng)建唯一索引。否則,數(shù)據(jù)庫引擎會顯示錯(cuò)誤消息。必須先刪除重復(fù)值,然后才能為一列或多列創(chuàng)建唯一索引。唯一索引中使用的列應(yīng)設(shè)置為 NOT NULL,因?yàn)樵趧?chuàng)建唯一索引時(shí),會將多個(gè) Null 值視為重復(fù)值。
CLUSTERED
創(chuàng)建索引時(shí),鍵值的邏輯順序決定表中對應(yīng)行的物理順序。聚集索引的底層(或稱葉級別)包含該表的實(shí)際數(shù)據(jù)行。一個(gè)表或視圖只允許同時(shí)有一個(gè)聚集索引。
具有唯一聚集索引的視圖稱為索引視圖。為一個(gè)視圖創(chuàng)建唯一聚集索引會在物理上具體化該視圖。必須先為視圖創(chuàng)建唯一聚集索引,然后才能為該視圖定義其他索引。
在創(chuàng)建任何非聚集索引之前創(chuàng)建聚集索引。創(chuàng)建聚集索引時(shí)會重新生成表中現(xiàn)有的非聚集索引。
如果沒有指定 CLUSTERED,則創(chuàng)建非聚集索引。
注意:
因?yàn)榘凑斩x,聚集索引的葉級別與其數(shù)據(jù)頁相同,所以創(chuàng)建聚集索引和使用 ON partition_scheme_name 或 ON filegroup_name 子句實(shí)際上會將表從創(chuàng)建該表時(shí)所在的文件組移到新的分區(qū)方案或文件組中。對特定的文件組創(chuàng)建表或索引之前,應(yīng)確認(rèn)哪些文件組可用并且有足夠的空間供索引使用。
NONCLUSTERED
創(chuàng)建一個(gè)指定表的邏輯排序的索引。對于非聚集索引,數(shù)據(jù)行的物理排序獨(dú)立于索引排序。
無論是使用 PRIMARY KEY 和 UNIQUE 約束隱式創(chuàng)建索引,還是使用 CREATE INDEX 顯式創(chuàng)建索引。每個(gè)表都最多可包含 999 個(gè)非聚集索引。
對于索引視圖,只能為已定義唯一聚集索引的視圖創(chuàng)建非聚集索引。
默認(rèn)值為 NONCLUSTERED。
index_name
索引的名稱。索引名稱在表或視圖中必須唯一,但在數(shù)據(jù)庫中不必唯一。索引名稱必須符合標(biāo)識符的規(guī)則。
column
索引所基于的一列或多列。指定兩個(gè)或多個(gè)列名,可為指定列的組合值創(chuàng)建組合索引。在 table_or_view_name 后的括號中,按排序優(yōu)先級列出組合索引中要包括的列。
一個(gè)組合索引鍵中最多可組合 16 列。組合索引鍵中的所有列必須在同一個(gè)表或視圖中。組合索引值允許的最大大小為 900 字節(jié)。
不能將大型對象 (LOB) 數(shù)據(jù)類型 ntext、text、varchar(max)、 nvarchar(max)、varbinary(max)、xml 或 image 的列指定為索引的鍵列。另外,即使 CREATE INDEX 語句中并未引用 ntext、text 或 image 列,視圖定義中也不能包含這些列。
如果 CLR 用戶定義類型支持二進(jìn)制排序,則可以為該類型的列創(chuàng)建索引。另外,對于已定義為用戶定義類型列的方法調(diào)用的計(jì)算列,只要這些方法標(biāo)記為確定性方法且不執(zhí)行數(shù)據(jù)訪問操作,便可為該計(jì)算列創(chuàng)建索引。
[ ASC | DESC ]
確定特定索引列的升序或降序排序方向。默認(rèn)值為 ASC。
INCLUDE ( column [ ,...n ] )
指定要添加到非聚集索引的葉級別的非鍵列。非聚集索引可以唯一,也可以不唯一。
在 INCLUDE 列表中列名不能重復(fù),且不能同時(shí)用于鍵列和非鍵列。
除 text、ntext 和 image 之外,允許所有數(shù)據(jù)類型。如果指定的任一非鍵列屬于 varchar(max)、nvarchar(max) 或 varbinary(max) 數(shù)據(jù)類型,則必須脫機(jī) (ONLINE = OFF) 創(chuàng)建或重新生成該索引。
精確或不精確的確定性計(jì)算列都可以是包含列。從 image、ntext、text、varchar(max)、nvarchar(max)、varbinary(max) 和 xml 數(shù)據(jù)類型派生的計(jì)算列可以包含在非鍵列中,前提是允許將這些計(jì)算列數(shù)據(jù)類型作為包含列。
WHERE filter_predicate
通過指定索引中要包含哪些行來創(chuàng)建篩選索引。篩選索引必須是對表的非聚集索引。為篩選索引中的數(shù)據(jù)行創(chuàng)建篩選統(tǒng)計(jì)信息。
篩選謂詞使用簡單比較邏輯且不能引用計(jì)算列、UDT 列、空間數(shù)據(jù)類型列或 hierarchyID 數(shù)據(jù)類型列。比較運(yùn)算符不允許使用 NULL 文本的比較。請改用 IS NULL 和 IS NOT NULL 運(yùn)算符。
下面是 Production.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 選項(xiàng)。
ON partition_scheme_name ( column_name )
指定分區(qū)方案,該方案定義要將分區(qū)索引的分區(qū)映射到的文件組。必須通過執(zhí)行 CREATE PARTITION SCHEME 或 ALTER PARTITION SCHEME,使數(shù)據(jù)庫中存在該分區(qū)方案。column_name 指定將作為分區(qū)索引的分區(qū)依據(jù)的列。該列必須與 partition_scheme_name 使用的分區(qū)函數(shù)參數(shù)的數(shù)據(jù)類型、長度和精度相匹配。column_name 不限于索引定義中的列。除了在對 UNIQUE 索引分區(qū)時(shí),必須從用作唯一鍵的列中選擇 column_name 外,還可以指定基表中的任何列。通過此限制,數(shù)據(jù)庫引擎可驗(yàn)證單個(gè)分區(qū)中的鍵值唯一性。
注意:
在對非唯一的聚集索引進(jìn)行分區(qū)時(shí),如果尚未指定分區(qū)依據(jù)列,則默認(rèn)情況下數(shù)據(jù)庫引擎將在聚集索引鍵列表中添加分區(qū)依據(jù)列。在對非唯一的非聚集索引進(jìn)行分區(qū)時(shí),如果尚未指定分區(qū)依據(jù)列,則數(shù)據(jù)庫引擎會添加分區(qū)依據(jù)列作為索引的非鍵(包含)列。
如果未指定 partition_scheme_name 或 filegroup 且該表已分區(qū),則索引會與基礎(chǔ)表使用相同分區(qū)依據(jù)列并被放入同一分區(qū)方案中。
有關(guān)將索引分區(qū)的詳細(xì)信息,請參閱已分區(qū)索引的特殊指導(dǎo)原則。
ON filegroup_name
為指定文件組創(chuàng)建指定索引。如果未指定位置且表或視圖尚未分區(qū),則索引將與基礎(chǔ)表或視圖使用相同的文件組。該文件組必須已存在。
ON "default"
為默認(rèn)文件組創(chuàng)建指定索引。
在此上下文中,“default”不是關(guān)鍵字。它是默認(rèn)文件組的標(biāo)識符,并且必須進(jìn)行分隔(類似于 ON "default" 或 ON[default])。如果指定了 "default",則當(dāng)前會話的 QUOTED_IDENTIFIER 選項(xiàng)必須為 ON。這是默認(rèn)設(shè)置。
[ FILESTREAM_ON { filestream_filegroup_name | partition_scheme_name | "NULL" } ]
在創(chuàng)建聚集索引時(shí),指定表的 FILESTREAM 數(shù)據(jù)的位置。FILESTREAM_ON 子句用于將 FILESTREAM 數(shù)據(jù)移動到不同的 FILESTREAM 文件組或分區(qū)方案。
filestream_filegroup_name 是 FILESTREAM 文件組的名稱。該文件組必須包含一個(gè)使用 CREATE DATABASE 或 ALTER DATABASE 語句為該文件組定義的文件;否則,將引發(fā)錯(cuò)誤。
如果表已分區(qū),則必須包含 FILESTREAM_ON 子句并且必須指定 FILESTREAM 文件組的分區(qū)方案,且此分區(qū)方案需使用與該表分區(qū)方案相同的分區(qū)函數(shù)和分區(qū)列。否則將引發(fā)錯(cuò)誤。
如果該表未分區(qū),則無法對 FILESTREAM 列分區(qū)。該表的 FILESTREAM 數(shù)據(jù)必須存儲在一個(gè)由 FILESTREAM_ON 子句指定的文件組中。
如果創(chuàng)建的是聚集索引且該表不包含 FILESTREAM 列,則可在 CREATE INDEX 語句中指定 FILESTREAM_ON NULL。
索引是加快檢索速度的方法,前提要數(shù)據(jù)量大。
索引分為:聚集索引、非聚集索引、唯一性索引
聚集索引:邏輯順序和物理順序一致,一張表只能有一個(gè)聚集索引,當(dāng)創(chuàng)建主鍵的時(shí)候默認(rèn)會創(chuàng)建聚集索引。
非聚集索引:邏輯順序和物理順序不一致??梢越ê芏鄠€(gè)非聚集索引,通過create index 默認(rèn)創(chuàng)建的索引是非聚集索引。
索引的準(zhǔn)則:
1、排序的字段
2、經(jīng)常要使用的字段
用創(chuàng)建索引的語句:
CREATE[?UNIQUE?]?[?CLUSTERED?|?NONCLUSTERED?]?INDEX索引名
ON?{表名|視圖名}?(列名[?ASC?|?DESC?]?[?,...n?]?)