資源描述:
《ms sql入門基礎(chǔ)-創(chuàng)建索引--》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。
1、MSSQL入門基礎(chǔ):創(chuàng)建索引>> 8.2.1用CREATEINDEX命令創(chuàng)建索引 CREATEINDEX既可以創(chuàng)建一個可改變表的物理順序的簇索引,也可以創(chuàng)建提高查詢性能的非簇索引。其語法如下: CREATE[UNIQUE][CLUSTERED
2、NONCLUSTERED] INDEXindex_nameON{table
3、vien[ASC
4、DESC][,...n]) [PDB] ] [ONfilegroup] 各參數(shù)說明如下:UNIQUE 創(chuàng)建一個惟一索引,即索引的鍵值不重復(fù)。在列包含重復(fù)值時,不能建惟一索引。如要使用此選項,則應(yīng)確定索引所包含的列均不允許NULL值,否則在使用時
5、會經(jīng)常出錯。CLUSTERED 指明創(chuàng)建的索引為簇索引。如果此選項缺省,則創(chuàng)建的索引為非簇索引。NONCLUSTERED 指明創(chuàng)建的索引為非簇索引其索引。數(shù)據(jù)頁中包含了指向數(shù)據(jù)庫中實(shí)際的表數(shù)據(jù)頁的指針。index_name 指定所創(chuàng)建的索引的名稱。索引名稱在一個表中應(yīng)是惟一的,但在同一數(shù)據(jù)庫或不同數(shù)據(jù)庫中可以重復(fù)。table 指定創(chuàng)建索引的表的名稱。必要時還應(yīng)指明數(shù)據(jù)庫名稱和所有者名稱。vien 指定被索引的列。如果使用兩個或兩個以上的列組成一個索引,則稱為復(fù)合索引。一個索引中最多可以指定16個列,但列的數(shù)據(jù)類型的長度和不能超過900個字節(jié)。PAD_INDEX 指定填充索引的內(nèi)部節(jié)
6、點(diǎn)的行數(shù),至少應(yīng)大于等于兩行。PAD_INDEX選項只有在FILLFACTOR選項指定后才起作用。因為PAD_INDEX使用與FILLFACTOR相同的百分比。缺省時,SQLServer確保每個索引頁至少有能容納一條最大索引行數(shù)據(jù)的空閑空間。如果FILLFACTOR指定的百分比不夠容納一行數(shù)據(jù)S,QLServer會自動內(nèi)部更改百分比。FILLFACTOR=fillfactor FILLFACTOR稱為填充因子,它指定創(chuàng)建索引時,每個索引頁的數(shù)據(jù)占索引頁大小的百分比,fillfactor的值為1到100。它其實(shí)同時指出了索引頁保留的自由空間占索引頁大小的百分比。即100-fillfactor。
7、對于那些頻繁進(jìn)行大量數(shù)據(jù)插入或刪除的表在建索引時應(yīng)該為將來生成的索引數(shù)據(jù)預(yù)留較大的空間,即將fillfactor設(shè)得較小,否則,索引頁會因數(shù)據(jù)的插入而很快填滿,并產(chǎn)生分頁,而分頁會大大增加系統(tǒng)的開銷。但如果設(shè)得過小,又會浪費(fèi)大量的磁盤空間,降低查詢性能。因此,對于此類表通常設(shè)一個大約為10的fillfactor。而對于數(shù)據(jù)不更改的、高并發(fā)的、只讀的表,fillfactor可以設(shè)到95以上乃至100?! ∪绻麤]有指定此選項,SQLServer默認(rèn)其值為0。0是個特殊值,與其它小FILLFACTOR 值(如:1,2)的意義不同,其葉節(jié)點(diǎn)頁被完全填滿,而在索引頁中還有一些空間??梢浴 ∮么鎯^程S
8、p_configure來改變默認(rèn)的FILLFACTOR值。IGNORE_DUP_KEY 此選項控制了當(dāng)往包含于一個惟一約束中的列中插入重復(fù)數(shù)據(jù)時SQLServer所作的反應(yīng)。當(dāng)選擇此選項時,SQLServer返回一個錯誤信息,跳過此行數(shù)據(jù)的插入,繼續(xù)執(zhí)行下面的插入數(shù)據(jù)的操作:當(dāng)沒選擇此選項時,SQLServer不僅會返回一個錯誤信息,還會回滾(RollsBack)整個INSERT語句(關(guān)于回滾,請參見數(shù)據(jù)庫更新章節(jié)中的事務(wù)一節(jié))。DROP_EXISTING 指定要刪除并重新創(chuàng)建簇索引。刪除簇索引會導(dǎo)致所有的非簇索引被重建,因為需要用行指針來替換簇索引鍵。如果再重建簇索引,那么非簇索引又會再
9、重建一次,以便用簇索引鍵來替換行指針。使用DROP_EXISTING選項可以使非簇索引只重建一次。STATISTICS_NOREPUTE 指定分布統(tǒng)計不自動更新。需要手動執(zhí)行不帶NOREPUTE子句的UPDATESTATISTICS命令。SORT_IN_TEMPDB 指定用于創(chuàng)建索引的分類排序結(jié)果將被存儲到Tempdb數(shù)據(jù)庫中。如果Tempdb數(shù)據(jù)庫和用戶數(shù)據(jù)庫位于不同的磁盤設(shè)備上,那么使用這一選項可以減少創(chuàng)建索引的時間,但它會增加創(chuàng)建索引所需的磁盤空間。ONfilegroup 指定存放索引的文件組。注意:數(shù)據(jù)類型為TEXT、NTEXT、IMAGE或BIT的列不能作為索引的列。 由于索
10、引的寬度不能超過900個字節(jié),因此數(shù)據(jù)類型為CHAR、VARCHAR、BINARY和VARBINARY的列的列寬度超過了900字節(jié),或數(shù)據(jù)類型為NCHAR、NVARCHAR的列的列寬度超過了450個字節(jié)時也不能作為索引的列?! ≡谑褂盟饕齽?chuàng)建向?qū)?chuàng)建索引時,不能將計算列包含在索引中,但在直接創(chuàng)建或使用CREATEINDEX命令創(chuàng)建索引時,則可以對計算機(jī)列創(chuàng)建索引,這在SQLServer2000以前