如何回答——請簡述MySQL索引型別
阿新 • • 發佈:2019-06-10
想必大家在被問到這個問題的時候,在網上總是能搜到不同的回答,卻又各不相同。其實這些答案大部分都是正確的,只不過在闡述MySQL索引型別的時候從不同方面入手而已。這裡歸納如下,具體的機制可以參考其他博文:
從資料結構角度
B+樹索引(O(log(n))):關於B+樹索引,可以參考 MySQL索引背後的資料結構及演算法原理
- hash索引:
- 僅僅能滿足"=","IN"和"<=>"查詢,不能使用範圍查詢
- 其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO訪問,所以 Hash 索引的查詢效率要遠高於 B-Tree 索引
- 只有Memory儲存引擎顯示支援hash索引
FULLTEXT索引(現在MyISAM和InnoDB引擎都支援了)
R-Tree索引(用於對GIS資料型別建立SPATIAL索引)
從物理儲存角度
聚集索引(clustered index)
非聚集索引(non-clustered index)
從邏輯角度
主鍵索引:主鍵索引是一種特殊的唯一索引,不允許有空值
普通索引或者單列索引
多列索引(複合索引):複合索引指多個欄位上建立的索引,只有在查詢條件中使用了建立索引時的第一個欄位,索引才會被使用。使用複合索引時遵循最左字首集合
唯一索引或者非唯一索引
空間索引:空間索引是對空間資料型別的欄位建立的索引,MYSQL中的空間資料型別有4種,分別是GEOMETRY、POINT、LINESTRING、POLYGON。
CREATE TABLE table_name[col_name data type]
[unique|fulltext|spatial][index|key][index_name](col_name[length])[asc|desc]
引數解析:
1、unique|fulltext|spatial為可選引數,分別表示唯一索引、全文索引和空間索引; 2、index和key為同義詞,兩者作用相同,用來指定建立索引 3、col_name為需要建立索引的欄位列,該列必須從資料表中該定義的多個列中選擇; 4、index_name指定索引的名稱,為可選引數,如果不指定,MYSQL預設col_name為索引值; 5、length為可選引數,表示索引的長度,只有字串型別的欄位才能指定索引長度; 6、asc或desc指定升序或降序的索引值儲存