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