MySQL索引

索引是什麼?

​ 索引是數據庫中一個或多個列的值進行排序的結構,是幫助MySQL高效獲取數據的數據結構。能夠理解爲,索引是一本書的目錄,若是想快速查找某個內容,能夠根據索引(目錄)快速的找到想要找到的內容。而沒必要要掃描整個數據庫。mysql

MySQL索引類型

  • 普通索引
  • 主鍵索引
  • 惟一索引
  • 組合索引
  • 全文索引

索引的優缺點:

索引的使用方式:對數據進行頻繁查詢創建索引,若是須要頻繁更改數據不建議使用索引sql

優勢:數據庫

  • 索引最大的好處就是提升查詢速度

缺點:數據結構

  • 缺點就是更新數據時效率低,更新數據的同時也要更新索引。
  • 索引須要佔據物理空間和數據空間。

B+索引和hash索引

​ 二者的區別:性能

  • B+索引數據有序,範圍查詢
  • Hash索引等值查詢效率高,對於範圍查詢、排序及組合索引仍然效率不高。因爲HASH的惟一及相似鍵值對的形式,很適合做爲索引。HASH索引能夠一次定位,不須要像樹形索引那樣逐層查找,所以具備極高的效率。可是,這種高效是有條件的,即只在「=」和「in」條件下高效

聚簇索引和非彙集索引

  • 彙集索引:數據按索引順序存儲,中子節點存儲真實的物理數據
  • 聚簇索引:將數據存儲與索引放到了一塊,找到索引也就找到了數據
  • 非彙集索引:存儲指向真正數據行的指針
  • 非聚簇索引:將數據存儲於索引分開結構,索引結構的葉子節點指向了數據的對應行。

索引的底層實現

三種樹的區別:mysql索引

  • 紅黑樹:紅黑樹進行增長或刪除的時候,會進行頻繁的調整,來保證紅黑樹的性質,會浪費時間
  • B-樹:b-樹查詢性能不穩定,查詢結構高度不致,每一個結點保存指向真實數據的指針,相對比與B+數每一層每屋存儲的元素更多,顯得更高一些。
  • B+數:b+數相比較於另外兩種數,顯得更矮更寬,查詢層次更淺。更方便查詢。

哪些狀況下須要建立索引?

  • 一、主鍵自動建立惟一索引指針

  • 二、頻繁做爲查詢條件的字段應該建立索引排序

  • 三、查詢中與其餘表關聯的字段,外鍵關係創建索引索引

  • 四、where條件裏用到的字段須要建立索引hash

  • 五、最好建立組合索引

  • 六、查詢中排序的字段,排序字段若經過索引訪問將大大提升排序速度

  • 七、查詢中涉及到統計和分組的字段

哪些狀況不須要建立索引?

  • 一、表記錄過少的時候
  • 二、常常增刪改的表
  • 三、包含許多重複內容的列
  • 四、頻繁更新的字段不適合建立索引
相關文章
相關標籤/搜索