如何回答——請簡述MySQL索引類型

想必你們在被問到這個問題的時候,在網上老是能搜到不一樣的回答,卻又各不相同。其實這些答案大部分都是正確的,只不過在闡述MySQL索引類型的時候從不一樣方面入手而已。這裏概括以下,具體的機制能夠參考其餘博文:html

從數據結構角度

  1. B+樹索引(O(log(n))):關於B+樹索引,能夠參考 MySQL索引背後的數據結構及算法原理mysql

  2. hash索引:
    • 僅僅能知足"=","IN"和"<=>"查詢,不能使用範圍查詢
    • 其檢索效率很是高,索引的檢索能夠一次定位,不像B-Tree 索引須要從根節點到枝節點,最後才能訪問到頁節點這樣屢次的IO訪問,因此 Hash 索引的查詢效率要遠高於 B-Tree 索引
    • 只有Memory存儲引擎顯示支持hash索引
  3. FULLTEXT索引(如今MyISAM和InnoDB引擎都支持了)算法

  4. R-Tree索引(用於對GIS數據類型建立SPATIAL索引)sql

從物理存儲角度

  1. 彙集索引(clustered index)數據結構

  2. 非彙集索引(non-clustered index)spa

從邏輯角度

  1. 主鍵索引:主鍵索引是一種特殊的惟一索引,不容許有空值code

  2. 普通索引或者單列索引htm

  3. 多列索引(複合索引):複合索引指多個字段上建立的索引,只有在查詢條件中使用了建立索引時的第一個字段,索引纔會被使用。使用複合索引時遵循最左前綴集合blog

  4. 惟一索引或者非惟一索引索引

  5. 空間索引:空間索引是對空間數據類型的字段創建的索引,MYSQL中的空間數據類型有4種,分別是GEOMETRY、POINT、LINESTRING、POLYGON。
    MYSQL使用SPATIAL關鍵字進行擴展,使得可以用於建立正規索引類型的語法建立空間索引。建立空間索引的列,必須將其聲明爲NOT NULL,空間索引只能在存儲引擎爲MYISAM的表中建立

CREATE TABLE table_name[col_name data type]
[unique|fulltext|spatial][index|key][index_name](col_name[length])[asc|desc]

參數解析:

一、unique|fulltext|spatial爲可選參數,分別表示惟一索引、全文索引和空間索引;
二、index和key爲同義詞,二者做用相同,用來指定建立索引
三、col_name爲須要建立索引的字段列,該列必須從數據表中該定義的多個列中選擇;
四、index_name指定索引的名稱,爲可選參數,若是不指定,MYSQL默認col_name爲索引值;
五、length爲可選參數,表示索引的長度,只有字符串類型的字段才能指定索引長度;
六、asc或desc指定升序或降序的索引值存儲
相關文章
相關標籤/搜索