一、索引分類
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)如果某個資料列包含太多重復的內容(如性別,為它建立索引就沒有太大的實際效果,)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/1118.html
標籤:MySQL
