索引的概念
索引是對資料庫表中一列或多列的值進行排序的一種資料結構,使用索引可快速訪問資料庫表中的特定資訊。索引的乙個主要目的就是加快檢索表中資料,亦即能協助資訊搜尋者盡快的找到符合限制條件的記錄id的輔助資料結構。
索引的使用場景
經常需要搜尋的列上。
作為主鍵的列上。
經常用在連線的列上,這些列主要是一些外來鍵,可以加快連線的速度。
經常需要根據範圍進行搜尋的列上。
經常需要排序的列上。
不適合用在查詢中很少用到的列。
不適合用在那些具有很少資料值的列.比如人事表的性別列,boolean資料型別的列。
不適合用在那些定義為text,image這些資料量相當大的列。
不適合用在當對修改效能的要求遠遠大於搜尋效能時.因為當增加索引時,會提高搜尋效能,但是會降低修改效能。
不適合含有null值,復合索引中只要有一列含有null值,那麼這一列對於此復合索引就是無效的。
不適合對索引字段使用like 「%aaa%」 ,如果非使用不可like 「aaa%」可以使用索引。
不適合在列上進行計算,這樣可能會導致索引失效。
不適合使用not in和<>操作
索引的優點
加快資料的檢索速度。
在資訊檢索過程中,若使用分組及排序子句進行時,通過建立索引能有效的減少檢索過程中所需的分組及排序時間,提高檢索效率。
通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的效能。
索引的缺點
建立索引和維護索引要耗費時間,這種時間隨著資料量的增加而增加,如對表進行insert、update和delete。
實際上索引也是一張表,該錶儲存了主鍵與索引欄位.索引需要佔物理空間。
索引的分類
聚簇索引(innodb 主鍵使用的是聚簇索引):表資料按照索引的順序來儲存的,也就是說索引項的順序與表中記錄的物理順序一致。對於聚集索引,葉子結點即儲存了真實的資料行,不再有另外單獨的資料頁。一般情況下主鍵會預設建立聚簇索引,在一張表上最多只能建立乙個聚集索引,因為真實資料的物理順序只能有一種。
非聚簇索引(myisam 不管是主鍵索引,還是二級索引使用的都是非聚簇索引):表資料儲存順序與索引順序無關。對於非聚集索引,葉結點包含索引字段值及指向資料頁資料行的邏輯指標,其行數量與資料表行資料量一致。
建立索引
1. create index 索引名稱 on 表名稱 (列名稱); 簡單索引
2. create unique index 索引名稱 on 表名稱 (列名稱) ;唯一索引
3. create index 索引名稱 on 表名稱 (列名稱, 列名稱);組合索引
4. create index 索引名稱 on 表名稱 (列名稱 desc) ; 降序索引
使用組合索引時需注意:只有第乙個字段出現在查詢條件中,該索引才可能被使用。因此將應用頻度高的字段,放置在復合索引的前面,會使系統最大可能地使用此索引,發揮索引的作用。
資料庫索引的資料結構基礎b+樹
b+ 樹是一種樹資料結構,通常用於資料庫和作業系統的檔案系統中。b+ 樹的特點是能夠保持資料穩定有序,其插入與修改擁有較穩定的對數時間複雜度。b+ 樹元素自底向上插入,這與二叉樹恰好相反。
1. 所有關鍵字都出現在葉子結點的鍊錶中(稠密索引),且鍊錶中的關鍵字恰好是有序的;
2. 不可能在非葉子結點命中;
3. 非葉子結點相當於是葉子結點的索引(稀疏索引),葉子結點相當於是儲存(關鍵字)資料的資料層;
4. 非葉子結點的子樹指標與關鍵字個數相同;
5. 為所有葉子結點增加乙個鏈指標;
6. 所有關鍵字都在葉子結點出現
7. 所有的葉子節點和相連的節點使用鍊錶相連,便於區間查詢和遍歷;
8. 資料庫中的索引一般是在磁碟上,資料量大的情況可能無法一次裝入記憶體,b+樹的設計可以允許資料分批載入,同時樹的高度較低,提高查詢效率;
資料庫 資料庫索引
索引是儲存引擎用於快速找到記錄的一種資料結構。索引以檔案的形式儲存在磁碟中。索引可以包含乙個或多個列的值。儲存引擎查詢資料的時候,先在索引中找對應值,然後根據匹配的索引記錄找到對應的資料行。1.b tree索引 2.雜湊索引 myisam和innodb儲存引擎 只支援btree索引,也就是說預設使用...
資料庫mysql索引 資料庫 mysql索引
mysql 索引 mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。打個比方,如果合理的設計且使用索引的mysql是一輛蘭博基尼的話,那麼沒有設計和使用索引的mysql就是乙個人力三輪車。索引分單列索引和組合索引。單列索引,即乙個索引只包含單個列,乙個表可...
資料庫索引
索引 索引列唯一索引 主鍵索引 聚簇索引和非聚簇索引 如何建立索引 如何刪除索引 使用索引可快速訪問資料庫表中的特定資訊。索引是對資料庫表中一列或多列的值進行排序的一種結構,例如 employee 表的姓 lname 列。如果要按姓查詢特定職員,與必須搜尋表中的所有行相比,索引會幫助您更快地獲得該資...