索引是什麼?
索引是數據庫中一個或多個列的值進行排序的結構,是幫助MySQL高效獲取數據的數據結構。能夠理解爲,索引是一本書的目錄,若是想快速查找某個內容,能夠根據索引(目錄)快速的找到想要找到的內容。而沒必要要掃描整個數據庫。mysql
MySQL索引類型
索引的優缺點:
索引的使用方式:對數據進行頻繁查詢要創建索引,若是須要頻繁更改數據不建議使用索引。sql
優勢:數據庫
缺點:數據結構
- 缺點就是更新數據時效率低,更新數據的同時也要更新索引。
- 索引須要佔據物理空間和數據空間。
B+索引和hash索引
二者的區別:性能
- B+索引數據有序,範圍查詢
- Hash索引等值查詢效率高,對於範圍查詢、排序及組合索引仍然效率不高。因爲HASH的惟一及相似鍵值對的形式,很適合做爲索引。HASH索引能夠一次定位,不須要像樹形索引那樣逐層查找,所以具備極高的效率。可是,這種高效是有條件的,即只在「=」和「in」條件下高效
聚簇索引和非彙集索引
- 彙集索引:數據按索引順序存儲,中子節點存儲真實的物理數據
- 聚簇索引:將數據存儲與索引放到了一塊,找到索引也就找到了數據
- 非彙集索引:存儲指向真正數據行的指針
- 非聚簇索引:將數據存儲於索引分開結構,索引結構的葉子節點指向了數據的對應行。
索引的底層實現
三種樹的區別:mysql索引
- 紅黑樹:紅黑樹進行增長或刪除的時候,會進行頻繁的調整,來保證紅黑樹的性質,會浪費時間
- B-樹:b-樹查詢性能不穩定,查詢結構高度不致,每一個結點保存指向真實數據的指針,相對比與B+數每一層每屋存儲的元素更多,顯得更高一些。
- B+數:b+數相比較於另外兩種數,顯得更矮更寬,查詢層次更淺。更方便查詢。
哪些狀況下須要建立索引?
-
一、主鍵自動建立惟一索引指針
-
二、頻繁做爲查詢條件的字段應該建立索引排序
-
三、查詢中與其餘表關聯的字段,外鍵關係創建索引索引
-
四、where條件裏用到的字段須要建立索引hash
-
五、最好建立組合索引
-
六、查詢中排序的字段,排序字段若經過索引訪問將大大提升排序速度
-
七、查詢中涉及到統計和分組的字段
哪些狀況不須要建立索引?
- 一、表記錄過少的時候
- 二、常常增刪改的表
- 三、包含許多重複內容的列
- 四、頻繁更新的字段不適合建立索引