1. 程式人生 > 實用技巧 >MySQL學習筆記九:索引

MySQL學習筆記九:索引

一、索引分類

1.1、索引的分類有以下幾種:

1)單值索引:即一個索引只包含單個列,一個表可以有多個單列索引。

2)唯一索引:索引列的值必須唯一,但允許有空值。

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

4)全文索引:只有在MyISAM引擎上才能使用,只能在CHAR、VARCHAR、TEXT型別欄位上使用全文索引。

5)空間索引:空間索引是對空間資料型別的欄位建立的索引。

二、索引操作

2.1、建立索引

語法:CREATE INDEX 索引名稱 ON table (column[,column]...);

CREATE INDEX ID_INDEX ON
emp (ID); CREATE INDEX NAME_INDEX ON emp (NAME);

2.2、刪除索引

語法:DROP INDEX 索引名稱 ON 表名;

DROP INDEX NAME_INDEX ON emp;

2.3、檢視索引

語法:SHOW INDEX FROM 表名;

SHOW INDEX FROM emp;

2.4、自動建立索引

1)在表上定義了主鍵時,會自動建立一個對應的唯一索引。

2)在表上定義了一個外來鍵時,會自動建立一個普通索引。

三、EXPLAIN

3.1、關於EXPLAIN

作用:用來檢視索引是否正在被使用,並且輸出其使用的索引的資訊。

3.2、EXPLAIN使用示例

3.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、以下情況適合/需要建立索引:

1)主鍵(自動建立唯一索引)

2)外來鍵

3)查詢中與其它表關聯的欄位

4)頻繁作為查詢條件的欄位

5)查詢中統計或者分組的欄位

6)查詢中排序的欄位

五、哪些情況不適合建立索引

5.1、以下情況不適合建立索引:

1)頻繁更新的欄位,因為每次更新不單單更新了記錄還會更新索引。

2)WHERE條件裡用不到的欄位

3)表記錄太少

4)經常增刪改的表

5)如果某個資料列包含太多重複的內容(如性別,為它建立索引就沒有太大的實際效果。)