【MYSQL】MYSQL的索引類型以及優缺點

B-Tree索引

  • 一般沒有特殊說明都是默認B-Tree索引,他使用B-Tree數據結構存儲數據
  • B-Tree索引可以加快訪問數據的速度,因爲存儲引擎不再需要進行全表掃描來獲取需要的數據,而是從索引的根節點進行搜索

可以使用B-Tree索引的查詢類型

  • 全值匹配
  • 匹配最左前綴
  • 匹配列前綴
  • 匹配範圍值
  • 精確匹配某一列並範圍匹配另外一列
  • 只訪問索引的查詢

限制

  • 如果不是按照索引的最左列開始查找,則無法使用索引
  • 不能跳過索引中的列。也就是如果有多個列作爲索引,只查詢一個列,是不會用到這個索引的。
  • 如果查詢中有某個列的範圍查詢,則其右邊所有列都無法使用索引優化查找。

這些限制都是跟B-Tree索引結構的順序性決定的,也就意味着,不同查詢條件需要不同順序的B-Tree索引

哈希索引

  • 哈希索引基於哈希表實現,只有精確匹配索引所有列的查詢纔有效。
  • 在mysql中,只有Memory引擎顯式支持哈希索引,也是Memory引擎的默認索引類型。

限制

  • 不能使用索引中的值來避免讀取行
  • 哈希索引數據並不是按照索引值順序存儲的,所以無法用於排序
  • 哈希索引和B-Tree索引一樣,也不能支持部分索引列匹配查找
  • 只支持等值比較,不支持範圍查詢
  • 哈希值一樣引起衝突的話,索引代價會很高

空間數據索引(R-Tree)

  • MyISAM表支持空間索引,可以存儲地理數據。
  • 必須使用GIS相關函數維護
  • MySQL中並不常用

全文索引

  • 用於查找文本中的關鍵詞,而不是直接比較索引中的值
  • 在相同的列中同時創建全文索引和B-Tree索引並不衝突

索引的優點

  • 大大減少服務器需要掃描的數據量
  • 幫助服務器避免排序和臨時表
  • 可以將隨機I/O變成順序I/O
發佈了350 篇原創文章 · 獲贊 449 · 訪問量 169萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章