1.一、索引的分類有如下幾種:sql
1)單值索引:即一個索引只包含單個列,一個表能夠有多個單列索引。spa
2)惟一索引:索引列的值必須惟一,但容許有空值。code
3)複合索引:一個索引包含多個列,如INDEX MultiIdx(id,name,age)blog
4)全文索引:只有在MyISAM引擎上才能使用,只能在CHAR、VARCHAR、TEXT類型字段上使用全文索引。排序
5)空間索引:空間索引是對空間數據類型的字段創建的索引。索引
2.一、建立索引table
語法:CREATE INDEX 索引名稱 ON table (column[,column]...);class
CREATE INDEX ID_INDEX ON emp (ID); CREATE INDEX NAME_INDEX ON emp (NAME);
2.二、刪除索引select
語法:DROP INDEX 索引名稱 ON 表名;數據類型
DROP INDEX NAME_INDEX ON emp;
2.三、查看索引
語法:SHOW INDEX FROM 表名;
SHOW INDEX FROM emp;
2.四、自動建立索引
1)在表上定義了主鍵時,會自動建立一個對應的惟一索引。
2)在表上定義了一個外鍵時,會自動建立一個普通索引。
3.一、關於EXPLAIN
做用:用來查看索引是否正在被使用,而且輸出其使用的索引的信息。
3.二、EXPLAIN使用示例
3.三、EXPLAIN輸出信息
id:select查詢的序列號,包含一組數字,表示查詢中執行select子句或操做表的順序。
select_type:所使用的SELECT查詢類型。
table:顯示這一行的數據是關於哪張表的。
type:type顯示的是訪問類型,是較爲重要的一個指標,結果值從最好到最差依次是:system>const>eq_ref>ref<range>index>all(倒序)通常來講,保證查詢至少達到range級別,最好能達到ref。
key:實際使用的索引,若爲null,則沒有使用到索引。(兩種可能,①沒創建索引。②創建索引,但索引失效)。查詢中若使用了覆蓋索引,則該索引僅出如今key列表中。
possible_keys:顯示可能應用在這張表中的索引,一個或多個。查詢涉及到的字段上若存在索引,則該索引將被列出,但不必定被查詢實際使用。
key_len:表示索引中使用的字節數,可經過該列計算查詢中使用的索引的長度。在不損失精確型的狀況下,長度越短越好,key_len顯示的值爲索引字段的最大可能長度,並不是實際使用長度,即key_len是根據定義計算而得,不是經過表內檢索出的。
ref:顯示索引的哪一列被使用了,若是可能的話,是一個常數,哪些列或者常量被用於查找索引列上的值。只有當type爲ref的時候,ref這列纔會有值。
rows:根據表統計信息以及索引選用狀況,大體估算出找到所需的記錄所須要讀取的行數,因此越小越好。能夠用來查詢sql的讀取行數。
extra:包含不適合在其它列中顯示但十分重要的額外信息。
4.一、如下狀況適合/須要建立索引:
1)主鍵(自動創建惟一索引)
2)外鍵
3)查詢中與其它表關聯的字段
4)頻繁做爲查詢條件的字段
5)查詢中統計或者分組的字段
6)查詢中排序的字段
5.一、如下狀況不適合建立索引:
1)頻繁更新的字段,由於每次更新不僅僅更新了記錄還會更新索引。
2)WHERE條件裏用不到的字段
3)表記錄太少
4)常常增刪改的表
5)若是某個數據列包含太多重複的內容(如性別,爲它創建索引就沒有太大的實際效果。)