定義:索引是對資料庫表中一列或多列的值進行排序的一種結構,使用索引可快速訪問資料庫表中的特定資訊。說白了,索引就是一種能夠在資料庫查詢中,加快查詢速度的工具。使用索引需要使用特定的資料結構,來提高查詢效率。
前面提到,索引需要採用特定的資料結構來提高查詢效率,那麼究竟採用了哪些資料結構,又是如何提高查詢效率的呢?
索引分按儲存方式分為:聚簇索引和非聚簇索引
根據資料庫的功能,可以在資料庫設計器中建立三種索引:唯一索引、主鍵索引、聚集索引
注:其中聚集索引就是聚簇索引
1、唯一索引
唯一索引是不允許其中任何兩行具有相同索引值的索引。
當現有資料中存在重複的鍵值時,大多數資料庫不允許將新建立的唯一索引與表一起儲存。資料庫還可能防止新增將在表中建立重複鍵值的新資料。
2、主鍵索引
資料庫表經常有一列或多列組合,其值唯一標識表中的每一行。該列稱為表的主鍵。
在資料庫關係圖中為表定義主鍵將自動建立主鍵索引,主鍵索引是唯一索引的特定型別。該索引要求主鍵中的每個值都唯一。當在查詢中使用主鍵索引時,它還允許對資料的快速訪問。
注:在部分資料庫中(如mysql),主鍵索引預設採用聚簇索引
3、聚集索引 (聚簇索引)
在聚集索引中,表中行的物理順序與鍵值的邏輯(索引)順序相同。乙個表只能包含乙個聚集索引。如果某索引不是聚集索引,則表中行的物理順序與鍵值的邏輯順序不匹配。與非聚集索引相比,聚集索引通常提供更快的資料訪問速度。
關於聚簇索引與非聚簇索引的詳細內容,請參看:
sql的主流索引結構有b+樹以及hash結構,現在使用b+數結構的居多。
有關b樹索引的相關用法及原理,請參看:
優點:
缺點:
1、表的主鍵、外來鍵必須有索引;每建立乙個索引,實際上都需要在硬碟上開闢一塊空間用於儲存這個索引所需要的資料結構(雖然表述不太準確但是是這個意思),因此不建議對太長的字段建立索引。2、資料量超過300的表應該有索引;
3、經常與其他表進行連線的表,在連線欄位上應該建立索引;
4、經常出現在where子句中的字段,特別是大表的字段,應該建立索引;
5、索引應該建在選擇性高的字段上;
6、索引應該建在小字段上,對於大的文字字段甚至超長字段,不要建索引;
7、復合索引的建立需要進行仔細分析;盡量考慮用單字段索引代替:
而且建立的索引並不是越多越好,因為索引雖然能夠提高查詢效率,但是會大大得影響插入、刪除和修改的效率,因為每一次資料的更新都會牽涉到對索引的修改。
綜上所述,往往在對於大量資料的插入的情況的時候,我們需要先刪除掉資料表的索引,等插入完畢後重新建立索引,這樣才能最大限度地保證資料庫的效率。
資料庫索引總結
資料庫索引,是資料庫管理系統中乙個排序的資料結構,以協助快速查詢 更新資料庫表中資料。索引的實現通常使用b樹及其變種b 樹。在資料之外,資料庫系統還維護著滿足特定查詢演算法的資料結構,這些資料結構以某種方式引用 指向 資料,這樣就可以在這些資料結構上實現高階查詢演算法。這種資料結構,就是索引。為表設...
資料庫索引總結
資料庫索引多採用b tree,也有hash索引。b tree索引和hash索引區別雜湊索引適合等值查詢,但是不無法進行範圍查詢 雜湊索引沒辦法利用索引完成排序 雜湊索引不支援多列聯合索引的最左匹配規則 如果有大量重複鍵值得情況下,雜湊索引的效率會很低,因為存在雜湊碰撞問題 索引簡單論述的文章 inn...
資料庫總結二索引
非聚集索引 非聚集索引的資料儲存在乙個位置,索引儲存在另乙個位置索引帶有指標指向資料儲存位置,索引中的專案按索引值的順序儲存,而表中資訊按另一種順序儲存。非聚集索引與聚集索引具有相同的b tree 結構,但兩個有重大區別 資料行不按非聚集索引鍵的順序排序和儲存 非聚集索引的葉層不包含資料頁,相反,葉...