MySQL學習筆記九:索引

1、索引分類

1.一、索引的分類有如下幾種:sql

1)單值索引:即一個索引只包含單個列,一個表能夠有多個單列索引。spa

2)惟一索引:索引列的值必須惟一,但容許有空值。code

3)複合索引:一個索引包含多個列,如INDEX MultiIdx(id,name,age)blog

4)全文索引:只有在MyISAM引擎上才能使用,只能在CHAR、VARCHAR、TEXT類型字段上使用全文索引。排序

5)空間索引:空間索引是對空間數據類型的字段創建的索引。索引

2、索引操做

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使用示例

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、哪些狀況適合/須要建立索引

4.一、如下狀況適合/須要建立索引:

1)主鍵(自動創建惟一索引)

2)外鍵

3)查詢中與其它表關聯的字段

4)頻繁做爲查詢條件的字段

5)查詢中統計或者分組的字段

6)查詢中排序的字段

5、哪些狀況不適合建立索引

5.一、如下狀況不適合建立索引:

1)頻繁更新的字段,由於每次更新不僅僅更新了記錄還會更新索引。

2)WHERE條件裏用不到的字段

3)表記錄太少

4)常常增刪改的表

5)若是某個數據列包含太多重複的內容(如性別,爲它創建索引就沒有太大的實際效果。)

相關文章
相關標籤/搜索