從數據結構角度html
一、B+樹索引(O(log(n))):關於B+樹索引,能夠參考 MySQL索引背後的數據結構及算法原理mysql
二、hash索引:
a 僅僅能知足"=","IN"和"<=>"查詢,不能使用範圍查詢
b 其檢索效率很是高,索引的檢索能夠一次定位,不像B-Tree 索引須要從根節點到枝節點,最後才能訪問到頁節點這樣屢次的IO訪問,因此 Hash 索引的查詢效率要遠高於 B-Tree 索引
c 只有Memory存儲引擎顯示支持hash索引算法
三、FULLTEXT索引(如今MyISAM和InnoDB引擎都支持了)sql
四、R-Tree索引(用於對GIS數據類型建立SPATIAL索引)數據結構
從物理存儲角度spa
一、彙集索引(clustered index)code
二、非彙集索引(non-clustered index)htm
從邏輯角度blog
一、主鍵索引:主鍵索引是一種特殊的惟一索引,不容許有空值索引
二、普通索引或者單列索引
三、多列索引(複合索引):複合索引指多個字段上建立的索引,只有在查詢條件中使用了建立索引時的第一個字段,索引纔會被使用。使用複合索引時遵循最左前綴集合
四、惟一索引或者非惟一索引
五、空間索引:空間索引是對空間數據類型的字段創建的索引,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指定升序或降序的索引值存儲