explain
1.explain用來查看當前sql的執(zhí)行計劃,分析sql的執(zhí)行效率
2.explain各字段解釋:
①.id: 表示查詢中執(zhí)行select子句或者操作表的順序
? >.id相同,順序由上而下 ? >.id不同,如果是子查詢。id序號會遞增,序號越大,優(yōu)先級越高,越先被執(zhí)行 ? >.id相同,可以認為是一組,從上往下順序執(zhí)行,在所有組中,id值越大,優(yōu)先級越高,越先被執(zhí)行②.select_type:查詢類型,用于區(qū)別?普通查詢、聯(lián)合查詢、子查詢等
? >.simple: 簡單的select查詢,查詢中不包含子查詢或者union
? ? >.primary: 查詢中包含任何復雜的子部分,最外層的會被標記為primary ? ? >.subquery: 在select或者where列表中包含子查詢 ? ? >.derived: 在from列表中包含了子查詢,被標記為derived(衍生),mysql會遞歸查詢這些子查詢,把結果放在臨時表中 ? ? >.union: 如果第二個select出現在union之后,就別標記為union,如果union包含在from字句的子查詢中,外層select被標記為derived ? ? >.union result: 從union表中獲取結果的select ③.table:表示執(zhí)行的sql屬于哪張表 ④.type:?訪問類型排列? ? all:全表掃描 ? index: full?index?scan? 全索引掃描 ? range: 只檢索給定范圍的行,使用一個索引來選擇行,key列顯示使用了哪些索引;一般就是在where中出現了between或者 < > in等 ? ref: 非唯一性索引掃描,返回匹配某個單獨值的所有行,本質上也是一種索引訪問,會返回匹配某個值的所有行 ? eq_ref: 唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配,常見主鍵或者唯一索引掃描 ? const: 表示通過索引一次就找到了,const用于比較primary_key和union,由于只匹配一條數據,所以很快, ? system: 表中只有一條記錄(等于系統(tǒng)表),這是const類型的特例,生產上不常見 ? ? 從最好到最差的順序 system > const > eq_ref > ref > range > index > all? ??? ? ? 一般而言,最少要的range或者ref級別 ? ⑤.possible_keys:顯示可能使用到的索引,但是不一定被使用 ⑥.key:實際使用的索引,如果為null。則表示要么沒有建索引,要么建索引了?但是沒有使用;如果使用了覆蓋索引,則該索引只出現在key中 ⑦.key_len:表示索引中使用的字節(jié)數,可通過該列計算查詢中使用的索引長度,長度越短越好 ⑧.ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數,哪些列或常量被用于查找索引列上的值 ? 如果使用的是常數來作為查詢條件,顯示的是const ? 如果是連接查詢,會顯示具體的字段。數據庫.表.字段 ?? ⑨.row:根據表統(tǒng)計信息以及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數,該值越小越好 ⑩.Extra:不適合顯示在其他字段但十分重要的額外信息(一個字段,可能會對應多個值) ? ?using?filesort(文件內排序):說明mysql會對數據使用一個外部的索引排序,而不是按照表內的索引順序進行讀取。mysql中無法使用索引完成的排序操作叫做?文件排序;出現這個,比較危險 ? ?using temporary:使用了臨時表保存中間的結果,mysql在對查詢結果排序時使用了臨時表,常見于order by排序和分組查詢group by; ? ?using index:表示select操作使用了覆蓋索引,避免了訪問表的數據行,效果不錯; ? ? ? ? ? ? ? ? ? ? ? 如果同時使用using?where,表示索引被用來執(zhí)行索引鍵值的查找; ? ? ? ? ? ? ? ? ? ? ? 如果沒有同時出現using? 表明索引被用來讀取數據,并沒有執(zhí)行查找動作轉載于:https://www.cnblogs.com/mpyn/p/11017720.html
總結
- 上一篇: IT兄弟连 Java语法教程 Java的
- 下一篇: 带线的无限级下拉树列表-完整示例篇