學習筆記(09):MySQL版SQL優化-索引類型及逐步優化、key_len計算方法

立即學習:https://edu.csdn.net/course/play/25283/297145?utm_source=blogtoedu

explain  +sql ;

id 值相同,從上往下順序執行

表的執行順序  因數量的個數改變而改變的原因:笛卡爾積

數據小的表,優先查詢

id值不同:id值越大越優先查詢

 

(2)select_type

primary :包含子查詢SQL中的主查詢(最外層)

SUBQUERY:包含子查詢SQL中的子查詢(非最外層)

simple:簡單查詢(不包含子查詢、union)

derived:衍生查詢(使用到了臨時表)

  a.在from 子查詢中只有一張表

  b.在from子查詢中,如果有table1 union table2,則table1 就是derived  table2 就是union

 

union  result 表(不常見):告知開發人員,那些表之間存在union查詢

system >const > eq_ref >ref> fulltext >ref_or_null >index_merge >  unique_subquery >index_

 

(3)type:索引類型、類型

system >const > eq_ref >ref>range>index>all       要對type進行優化的前提:有索引

其中:system ,const 只是理想情況;實際能達到ref>range

 

system(忽略):只有一條數據的系統:或衍生表只有一條數據的主查詢

 

增加索引:

alter table test01 add constraint tid_pk primary key(tid);

 

const:僅僅能查到一條數據的SQL,用於Primary key 或unique索引(類型與索引類型有關)

eq_ref :唯一性索引;對於每個索引建的查詢,返回匹配唯一行數據(有且只有一個,不能多、不能0)

常見於唯一索引和主鍵索引。

alter table teacherCard add constraint pk_tcid primary key(tcid);

 

alter table teacher add constraint uk_tcid  unique index(tcid);

 

 range :檢索指定範圍的行,where 後面是一個範圍查詢(between ,> <>=,   特殊:in有時候會失效,從而轉爲無索引all )

 

index:查詢全部索引中數據

   只需要掃描索引表,不需要所有表中的所有數據

 

all:查詢全部數據

需要全表所有,即需要所有表中的所有數據

 

system/const:結果只有一條數據

eq_ref:結果多條,但是每條數據是唯一的;

ref:結果多條;但是每條數據是0條或多條;

(4)possible_keys:可能用到的索引,是一種預測,不準。

 

如果possible_key  /key 是NULL,則說明沒用索引

(5)key:實際使用到的索引

(6)key_len:索引的長度  作用:用於判斷複合索引受被完全使用。

create table test_k1(

 name char(20) not null default ''

);

alter table test_kl add index index_name(name);

 

utf8:1個字符3個字節

gbk:1個字符2個字節

latin:1個字符1個字節

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