PS:划重點,以下是筆記
存儲方式區分
1. B-樹索引
目前大多數索引都是采用B-樹來存儲,其包含組件有:
- 葉子節點:包含的條目直接指向表里的數據行。葉子節點之間彼此相連,一個葉子節點有一個指向下一個葉子節點的指針。
- 分支節點:包含的條目指向索引里其他的分支節點或者葉子節點。
- 根節點:一個 B-樹索引只有一個根節點,實際上就是位於樹的最頂端的分支節點。
2. 哈希索引
哈希索引也稱為散列索引或 HASH 索引。MySQL 目前僅有 MEMORY 存儲引擎和 HEAP 存儲引擎支持這類索引。其中,MEMORY 存儲引擎可以支持 B-樹索引和 HASH 索引,且將 HASH 當成默認索引。
哈希索引的最大特點是訪問速度快,但也存在下面的一些缺點:
- MySQL 需要讀取表中索引列的值來參與散列計算,散列計算是一個比較耗時的操作。也就是說,相對於 B-樹索引來說,建立哈希索引會耗費更多的時間。
- 不能使用 HASH 索引排序。
- HASH 索引只支持等值比較,如"=" "IN()"或"<=>"。
- HASH 索引不支持鍵的部分匹配,因為在計算 HASH 值的時候是通過整個索引值來計算的。
邏輯區分
1. 普通索引
普通索引是 MySQL 中最基本的索引類型,它沒有任何限制,唯一任務就是加快系統對數據的訪問速度。允許重復值和空值。
關鍵字是 INDEX 或 KEY。
2. 唯一索引
唯一索引列的值必須唯一,允許有空值。如果是組合索引,則列值的組合必須唯一。
關鍵字是 UNIQUE。
3. 主鍵索引
主鍵索引是一種特殊的唯一索引,不允許值重復或者值為空。
關鍵字是 PRIMARY KEY。
4. 空間索引
空間索引是對空間數據類型的字段建立的索引,不允許空值,只能在存儲引擎為 MyISAM 的表中創建。
關鍵字是 SPATIAL。
5. 全文索引
全文索引主要用來查找文本中的關鍵字,只能在 CHAR、VARCHAR 或 TEXT 類型的列上創建。只有 MyISAM 存儲引擎支持,允許重復值和空值。
關鍵字是 FULLTEXT。
實際使用區分
1. 單列索引
單列索引可以是普通索引,也可以是唯一性索引,還可以是全文索引。只要保證該索引只對應一個字段即可。
2. 組合索引
組合索引也稱為復合索引或多列索引。相對於單列索引來說,組合索引是將原表的多個列共同組成一個索引。
查詢時,字段順序需與索引順序一致;LIKE時,首字符不能是 '%',否則會影響索引使用。