1、索引概述
建立索引是加快查詢速度的有效手段,使用者可以根據應用環境的需要,在基本表上建立乙個或者多個索引,以提供多種訪問路徑,加快查詢速度。
一般來說,建立與刪除索引由資料庫管理員dba或者表的屬主(owner),即建立表的人負責完成,系統在訪問資料時會自動選擇合適的索引作為訪問路徑,使用者不必也不能顯示地選擇索引。
2、索引優點和缺點
首先明白為什麼建立索引,因為建立索引可以大大提高系統的效能。
通過建立唯一性索引,可以保證資料庫表中每一行資料的唯一性。可以大大加快資料的檢索速度,這也是建立索引的最主要的原因。可以加速表和表之間的連線,特別是在實現資料的參考完整性方面特別有意義。在使用分組和排序子句進行資料檢索時,同樣可以顯著減少查詢中分組和排序的時間。通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。增加索引有如此多的優點,為什麼不對錶中的每乙個列建立乙個索引呢?這種想法固然有其合理性,然而也有其片面性,雖然索引有許多的優點,但是,為表中的每乙個列都增加索引,是非常不明智的,這是因為,增加索引也有許多不利的乙個方面。 建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加。索引需要佔物理空間,除了資料表佔資料空間之外,每乙個索引還要佔一定的物理空間,如果要建立舉聚簇索引,那麼需要的空間就會更大。當對表中的資料進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了資料的維護速度。索引是建立在資料庫表中的某些列上,因此在建立索引的時候,應該仔細考慮在哪些列上可以建立索引,在哪些列上不能建立索引,一般來說,應該在這些列上建立索引:
1、在經常需要搜尋的列上,可以加快搜尋速度
2、在作為主鍵的列上,強制該列的唯一性和組織表中資料的排列結構。
3、在經常用在連線的列上,這些列主要是一些外來鍵,可以加快連線的速度。
4、在經常需要根據範圍進行搜尋的列上建立索引,因為索引已經排序,其指定的範圍是連續的。
5、在經常需要排序的列上建立索引,因為索引已經排序,這樣查詢可以利用索引的排序,加快排序查詢時間。
6、在經常使用where子句中的列上面建立索引,加快條件的判斷速度。 同樣對於有些列是不應該建立索引的,一般來說,不應該建立索引的這些列具有下列特點:
1、對於那些在查詢中很少使用或者參考的列不應該建立索引,這是因為,既然這些列很少使用到,因此有索引或者無索引,並不能提高查詢速度,相反,由於增加了索引,反而降低了系統的維護速度和增加了空間需求。
2、對於那些只有很少資料值的列也不應該增加索引,這是因為,由於這些列的取值很少,比如人事表的性別列,在查詢的結果中,結果集的資料行佔了表中資料行的很大比例,即需要在表中搜尋的資料行的比例很大,著呢國家索引,並不能明顯加快檢索速度。
3、對於那些定義為text、image和bit資料型別的列不應該增加索引,這是因為,這些列的資料量要麼相當大,要麼取值很少。
4、當修改效能遠遠大於檢索效能時,不應該建立索引,這是因為,修改效能和檢索效能是互相矛盾的,當增加索引時,會提高檢索效能,但是會降低修改效能,當減少索引時,會提高修改效能,降低檢索效能,因此,當修改效能遠遠大於檢索效能時,不應該建立索引。
3、建立索引 建立索引有多種方法,這些方法包括直接建立索引方法和間接建立索引的方法,直接建立索引,使用如下語句: create [unique][cluster][index 索引 on 表 (列[次][,列[次]]......);說明:其中表是要建立索引的基本表的名字,索引還可以建立在該錶的一列或者多列上,各列之間用逗號分隔,每個列後面還可以用次指定索引值的排序次序,可選asc(公升序)或者desc(降序),預設值為asc。 unique表明此索引的每乙個索引值值對應唯一的資料記錄。 cluster表示要建立的索引是聚簇索引,所謂聚簇索引是指索引項的順序與表中記錄的物理順序一致的索引組織。還有一種方法建立索引,在表中定義主鍵約束或者唯一約束時,同時也建立了索引,雖然,這兩種方法都可以建立索引,但是它們建立索引的具體內容是有區別的:當在表上定義主鍵或者唯一約束時,如果表中已經有了使用create index語句建立的標準索引的,那麼主鍵約束或者唯一性約束建立的索引覆蓋以前建立的標準索引,也就是說主鍵約束或者唯一約束建立的索引的優先順序高於使用create index語句建立的索引。 eg:為學生-課程資料庫中的student,course,sc 3個表建立索引,其中student表按學號公升序建唯一索引,course表按課程號公升序建唯一索引,sc表按學號公升序和課程號降序建唯一索引。 create unique index stusno on student(sno); create unique index coucno on course(cno); create unique index scno on sc(sno asc,cno desc);
4、刪除索引 索引一經建立,就有系統使用和維護它,不需要使用者的干預,建立索引是為了減少查詢操作的時間,但如果資料增刪改頻繁,系統會花費許多時間來維護索引,從而降低了查詢效率,這時可以刪除一些不必要的索引。在sql中,刪除索引使用drop index 語句,其一般格式為: drop index 索引; eg:刪除student表的stusname索引 drop index stusname;刪除索引時,系統會同時刪除資料字典中刪除有該索引的描述。
5、總結 在rdbms中索引一般採用b+樹、hash索引來實現,b+樹索引具有動態平衡的優點,hash索引具有查詢速度快的特點,索引是關聯式資料庫的內部實現技術,屬於內模式的範疇。使用者使用create index語句定義索引時,可以定義索引是唯一索引、非唯一索引或者聚餐索引,至於某乙個索引是採用b+樹,還是hash索引則由具體的rdbms來決定。
資料庫系統概論 緒論 資料庫系統概論(一)
1.1 資料庫系統概論 1.1.1 資料庫系統概論 1.資料 描述事物的符號記錄稱為是資料 資料的解釋叫做語義,他與資料時密不可分的 記錄是計算機中表示和儲存資料的一種格式或者乙個方法 2.資料庫 把資料以一定的格式存放在計算機儲存裝置上的倉庫就是資料庫 共享性 有組織 永久儲存是資料庫的三大特徵 ...
資料庫系統概論
資料庫系統概論 1 現實世界的資料化過程 現實世界是由實際存在的事物組成的。每種事物都有無窮的特性,事物之間有著錯綜複雜的聯絡。資訊世界是現實世界在人腦中的反映。現實世界中的事物和事物特性在資訊世界中分別反映為實體和實體的屬性。資訊世界是由實體組成的,每種實體都有自己有限的屬性。本質上說,實體是由有...
《資料庫系統概論》
一 概述 1.關係模型的組成 資料結構 二維表 關係 資料庫中全部資料以及資料間的聯絡都以關係來表示。資料操作 增 刪 改 查 資料的約束條件 實體完整性,參照完整性,使用者自定義的完整性。2.關係的資料結構 域 是一組既有相同資料類的值的集合,又稱值域。域中所包含值的個數稱為域的基數。笛卡爾積 所...