MySQL索引類型區分


PS:划重點,以下是筆記

存儲方式區分

1. B-樹索引

目前大多數索引都是采用B-樹來存儲,其包含組件有:

  • 葉子節點:包含的條目直接指向表里的數據行。葉子節點之間彼此相連,一個葉子節點有一個指向下一個葉子節點的指針。
  • 分支節點:包含的條目指向索引里其他的分支節點或者葉子節點。
  • 根節點:一個 B-樹索引只有一個根節點,實際上就是位於樹的最頂端的分支節點。

2. 哈希索引

哈希索引也稱為散列索引或 HASH 索引。MySQL 目前僅有 MEMORY 存儲引擎和 HEAP 存儲引擎支持這類索引。其中,MEMORY 存儲引擎可以支持 B-樹索引和 HASH 索引,且將 HASH 當成默認索引。

哈希索引的最大特點是訪問速度快,但也存在下面的一些缺點:

  • MySQL 需要讀取表中索引列的值來參與散列計算,散列計算是一個比較耗時的操作。也就是說,相對於 B-樹索引來說,建立哈希索引會耗費更多的時間。
  • 不能使用 HASH 索引排序。
  • HASH 索引只支持等值比較,如"=" "IN()"或"<=>"。
  • HASH 索引不支持鍵的部分匹配,因為在計算 HASH 值的時候是通過整個索引值來計算的。

邏輯區分

1. 普通索引

普通索引是 MySQL 中最基本的索引類型,它沒有任何限制,唯一任務就是加快系統對數據的訪問速度。允許重復值和空值。

關鍵字是 INDEXKEY

2. 唯一索引

唯一索引列的值必須唯一,允許有空值。如果是組合索引,則列值的組合必須唯一。

關鍵字是 UNIQUE

3. 主鍵索引

主鍵索引是一種特殊的唯一索引,不允許值重復或者值為空。

關鍵字是 PRIMARY KEY

4. 空間索引

空間索引是對空間數據類型的字段建立的索引,不允許空值,只能在存儲引擎為 MyISAM 的表中創建。

關鍵字是 SPATIAL

5. 全文索引

全文索引主要用來查找文本中的關鍵字,只能在 CHAR、VARCHAR 或 TEXT 類型的列上創建。只有 MyISAM 存儲引擎支持,允許重復值和空值。

關鍵字是 FULLTEXT

實際使用區分

1. 單列索引

單列索引可以是普通索引,也可以是唯一性索引,還可以是全文索引。只要保證該索引只對應一個字段即可。

2. 組合索引

組合索引也稱為復合索引或多列索引。相對於單列索引來說,組合索引是將原表的多個列共同組成一個索引。

查詢時,字段順序需與索引順序一致;LIKE時,首字符不能是 '%',否則會影響索引使用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM