1.4 SQL Server 2000索引管理與書籍中的索引類似,資料庫中的索引使資料庫程式無須對整個表進行掃描,就可以在其中找到所需資料。書中的索引是一個詞語列表,其中註明了包含各個詞的頁碼。而資料庫中的索引,是某個表中一列或者若干列值的集合,以及相應的指向表中物理標識這些值的資料頁的邏輯指標清單。
1.4.1 索引的設計在SQL Server中,有兩種特殊的索引:惟一索引和叢集索引。(1) 惟一索引在SQL Server中,當惟一性是資料本身的特點時,可建立惟一索引,但索引列的組合不同於表的主鍵。例如,如果頻繁查詢表StudentsInfo的學生編號(Stu_Id)列,而且學生編號是惟一的,則在Stu_Id上建立惟一索引。SQL Server 2000會自動建立惟一索引,以強制實施PRIMARY KEY和UNIQUE約束的惟一性要求。除非表中已存在叢集索引,或者顯式指定了非叢集索引,否則將會建立一個惟一的叢集索引,以實施PRIMARY KEY約束。除非顯式指定了叢集索引,否則,預設情況下建立惟一的非叢集索引以強制UNIQUE約束。(2) 叢集索引叢集索引確定表中資料的物理順序。叢集索引類似於電話簿,後者按姓氏排列資料。由於叢集索引規定資料在表中的實體儲存體順序,因此一個表只能包含一個叢集索引。 叢集索引對於那些經常要搜尋範圍值的列特別有效。例如,如果頻繁查詢某一年級段的學生資訊,則使用叢集索引可以迅速找到包含開始年齡的行,然後檢索表中所有相鄰的行,直到到達結束年齡。這樣有助於提高此類查詢的效能。當索引值惟一時,使用叢集索引尋找特定的行也很有效率。例如,使用學生編號Stu_Id尋找特定學生的最快速方法,是在Stu_Id 列上建立叢集索引或PRIMARY KEY約束。
1.4.2 索引的建立、修改和刪除 使用者可以在表屬性對話方塊中,通過“索引/鍵”選項卡來建立索引,4-19所示。 圖4-19 在“索引/鍵”頁面中建立索引在該對話方塊中單擊“建立”按鈕,則“選定的索引”文字框會顯示系統分配給新索引的名稱。在“列名”下選擇要建立索引的列,對所選的列,可通過“順序”列設定其排序方式。如果要建立惟一索引,可以選中“建立UNIQUE”複選框。如果要建立叢集索引,請選中“建立為CLUSTERED”複選框。因為一個表中只能有一個叢集索引,索引如果已經存在了其他叢集索引,就會提示使用者不能再建立新的叢集索引。設定完成後,單擊“關閉”按鈕。當儲存表或關係圖時,索引即建立到資料庫中。此外,也可以使用Transact-SQL語句中的CREATE INDEX語句。使用Transact-SQL語句中的CREATE INDEX命令建立索引:其文法形式如下:CREATE [UNIQUE] [CLUSTERED| NONCLUSTERED ]INDEX
index_name ON {
table |
view } (
Column [ ASC | DESC ] [ ,...n ] ) [WITH[PAD_INDEX][[,]FILLFACTOR=fillfactor][[,]IGNORE_DUP_KEY][[,]DROP_EXISTING] [[,]STATISTICS_NORECOMPUTE][[,]SORT_IN_TEMPDB]][ ON filegrou
p ]其中各參數說明如下。● UNIQUE:用於指定為表或視圖建立惟一索引,即不允許存在索引值相同的兩行。 ● CLUSTERED:用於指定建立的索引為叢集索引。 ● NONCLUSTERED:用於指定建立的索引為非叢集索引。●
index_name
:用於指定所建立的索引的名稱。 ●
table
:用於指定建立索引的表的名稱。 ●
view
:用於指定建立索引的視圖的名稱。 ●
ASC|DESC:用於指定具體某個索引列的升序或降序排序方向。 ●
Column
:用於指定被索引的列。● PAD_INDEX:用於指定索引中間級中每個頁(節點)上保持開放的空間。● FILLFACTOR = fillfactor:用於指定在建立索引時,每個索引頁的資料占索引頁大小的百分比,fillfactor的值為1到100。● IGNORE_DUP_KEY:用於控制當向包含於一個惟一叢集索引中的列中插入重複資料時SQL Server所作的反應。 ● DROP_EXISTING:用於指定應刪除並重新建立已命名的先前存在的叢集索引或者非叢集索引。 ● STATISTICS_NORECOMPUTE:用於指定到期的索引統計不會自動重新計算。 ● SORT_IN_TEMPDB:用於指定建立索引時的中間排序結果將儲存在tempdb資料庫中。 ● ON filegroup:用於指定存放索引的檔案組。 例如,為表StudentsInfo的Stu_Id列建立惟一索引。USE StudentCREATE UNIQUE INDEX IX_StudentsInfoON StudentsInfo(Stu_Id)在“表屬性”對話方塊的“索引/鍵”對話方塊裡,使用者也可以修改和刪除索引。也可以使用Transact-SQL語句中的DROP INDEX語句。其文法形式如下:DROP INDEX {table.index | view.index} [ ,...n ] 其中,table | view用於指定索引列所在的表或索引檢視表,index用於指定要刪除的索引名稱。例如,刪除表StudentsInfo中名為IX_StudentsInfo的索引,文法為:DROP INDEX StudentsInfo.IX_StudentsInfo注意,DROP INDEX命令不能刪除由CREATE TABLE或者ALTER TABLE命令建立的主鍵或者惟一性約束索引,也不能刪除系統資料表中的索引。