哈希索引
哈希索引,只有精確匹配索引所有列的查詢纔有效,對於每一行數據,存儲引擎都會對所有的索引計算一個哈希碼。哈希索引將所有的哈希碼存儲在索引中,同時在哈希表中保存指向每個數據行的指針。(如果多個列的哈希值相同,索引會以鏈表的方式存放多個指針記錄到同一個哈希條目中。)
因爲索引自身只存儲對應的哈希值,所以索引的結構十分緊湊,哈希索引查找的速度非常快,但是哈希索引也有它的限制:
- 1、哈希索引不是按照索引順序存儲的,無法用於排序。
- 2、不支持部分索引列匹配查找。
- 3、不支持範圍查找。
聚集索引
每個存儲引擎爲InnoDB的表都有一個特殊的索引,叫聚集索引。聚集索引並不是一種單獨的索引類型,而是一種數據存儲方式。當表有聚集索引的時候,它的數據行實際上存放在葉子頁中。一個表不可能有兩個地方存放數據,所以一個表只能有一個聚集索引。
因爲是存儲引擎負責實現索引,因此不是所有的存儲引擎都支持聚集索引。InnoDB表中聚集索引的索引列就是主鍵,所以聚集索引頁叫主鍵索引。
二級索引
對於InnoDB表,在非主鍵列的其他列上建的索引就是二級索引(因爲聚集索引只有一個)。二級索引可以有0個或多個。二級索引的節點頁和聚集索引一樣,只存被索引列的值,而二級索引的葉子頁除了索引列值,還存這一列對應的主鍵值。