數據庫索引簡介

(1)、什麼是索引?

MySQL官方對索引的定義爲:索引(Index)是幫助MySQL高效獲取數據的數據結構。

可以得到索引的本質:索引是數據結構。

可以簡單理解爲“排好序的快速查找數據結構”。

(2)、 索引介紹

在數據之外,數據庫系統還維護着滿足特定查找算法的數據結構,這些數據結構以某種方式引用(指向)數據,這樣就可以在這些數據結構上實現高級查找算法。這種數據結構,就是索引。下圖就是一種可能的索引方式示例:

左邊是數據表,一共有兩列七條記錄,最左邊的是數據記錄的物理地址。

 

爲了加快Col2的查找,可以維護一個右邊所示的二叉查找樹,每個節點分別包含索引鍵值和一個指向對應數據記錄物理地址的指針,這樣就可以運用二叉查找在一定的複雜度內獲取到相應數據,從而快速的檢索出符合條件的記錄。

二叉樹弊端之一:二叉樹很可能會發生兩邊不平衡的情況。

B-TREE: (B:balance)  會自動根據兩邊的情況自動調節,使兩端無限趨近於平衡狀態。可以使性能最穩定。(myisam使用的方式)

B-TREE弊端:(插入/修改操作多時,B-TREE會不斷調整平衡,消耗性能)從側面說明了索引不是越多越好。

B+TREE:Innodb 所使用的索引。

(3)、結論

數據本身之外,數據庫還維護着一個滿足特定查找算法的數據結構,這些數據結構以某種方式指向數據,這樣就可以在這些數據結構的基礎上實現高級查找算法,這種數據結構就是索引。

一般來說索引本身也很大,不可能全部存儲在內存中,因此索引往往以索引文件的形式存儲的磁盤上

我們平常所說的索引,如果沒有特別指明,都是指B樹(多路搜索樹,並不一定是二叉的)結構組織的索引。其中聚集索引,次要索引,覆蓋索引,複合索引,前綴索引,唯一索引默認都是使用B+樹索引,統稱索引。當然,除了B+樹這種類型的索引之外,還有哈稀索引(hash index)等。

(4)、優勢

類似大學圖書館建書目索引,提高數據檢索的效率,降低數據庫的IO成本

通過索引列對數據進行排序,降低數據排序的成本,降低了CPU的消耗

(5)、劣勢

實際上索引也是一張表,該表保存了主鍵與索引字段,並指向實體表的記錄,所以索引列也是要佔用空間的

雖然索引大大提高了查詢速度,同時卻會降低更新表的速度,如對錶進行INSERT、UPDATE和DELETE。 因爲更新表時,MySQL不僅要保存數據,還要保存一下索引文件每次更新添加了索引列的字段, 都會調整因爲更新所帶來的鍵值變化後的索引信息

索引只是提高效率的一個因素,如果MySQL有大數據量的表,就需要花時間研究建立最優秀的索引,或優化查詢語句

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章