mysql索引簡析

數據結構角度出發:

1、B+Tree(O(log(n))):關於B+樹索引,可以參考 MySQL索引背後的數據結構及算法原理

2、hash索引:

a 僅僅能滿足"=","IN"和"<=>"查詢,不能使用範圍查詢

b 其檢索效率非常高,索引的檢索可以一次定位,不像B-Tree 索引需要從根節點到枝節點,最後才能訪問到頁節點這樣多次的IO訪問,所以 Hash 索引的查詢效率要遠高於 B-Tree 索引

c 只有Memory存儲引擎顯示支持hash索引

3、FULLTEXT索引(現在MyISAM和InnoDB引擎都支持了)

4、R-Tree索引(用於對GIS數據類型創建SPATIAL索引)

 

從物理存儲角度

1、聚集索引(clustered index)

2、非聚集索引(non-clustered index)

 

從邏輯角度

1、主鍵索引:主鍵索引是一種特殊的唯一索引,不允許有空值

2、普通索引或者單列索引

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

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]

1、unique|fulltext|spatial爲可選參數,分別表示唯一索引、全文索引和空間索引;

2、index和key爲同義詞,兩者作用相同,用來指定創建索引

3、col_name爲需要創建索引的字段列,該列必須從數據表中該定義的多個列中選擇;

4、index_name指定索引的名稱,爲可選參數,如果不指定,MYSQL默認col_name爲索引值;

5、length爲可選參數,表示索引的長度,只有字符串類型的字段才能指定索引長度;

6、asc或desc指定升序或降序的索引值存儲

 

注:複合索引(多列索引)遵循最左原則。例如:一張表中建立了(A,B,C)這樣一個複合索引,那麼在查數據庫的時候只有A條件存在的時候纔會使用索引

eg:select * from table where A='' and B = '' and C = ''

select* from table where A='' and B = ''

select* from table where A='' and C = ''

select* from table where A=''

以上四個語句會使用複合索引,但是

select* from table where B='' and C = ''

select* from table where B=''

select* from table where C = ''

這些語句就不會使用到複合索引

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章