MYSQL中的EXPLAN是用來解析sql語句的

explain是用來分析sql語句,幫助優化的一個命令。

explain的語法如下:

explain [extended] select … from … where …

如果使用了extended,那麼在執行完explain語句後,可以使用show warnings語句查詢相應的優化信息。

比如我們執行  select uid from user where uname=’scofield’ order by uid  執行結果會有

+—-+————-+——-+——-+——————-+———+———+——-+——+——-+
| id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra |
+—-+————-+——-+——-+——————-+———+———+——-+——+——-+

這些東西。

其中 table 表示是哪個表的數據。

type比較重要。表示鏈接的類型。鏈接類型由好到壞的,依次是    system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

一般情況,至少要達到 range 級別,最好是 ref 級別。否則可能會有性能問題。

possible_keys 是指可以應用到該表的索引,如果爲NULL則沒有。

key 是指用到的索引。

key_len 是索引的長度,在不影響查詢精度的情況下,值越小越好。

ref 是指索引的那一列被使用了。一般會是個常數。

rows 是指有多少行。

extra 是指額外的信息。也是比較重要的。如果值爲 distinct ,說明mysql 找到了域行聯合匹配的行,就不再查找了。

如果值爲 not exits  :  mysql優化了 left join ,一旦找到了 left join 匹配的行,便不再進行搜索了。

如果值爲 rang checked for each :  沒有找到理想的索引。

如果爲 using filesort ,則需要改進sql了。這說明 mysql執行 需要 文件排序。這是比較影響效率的。

如果爲  using  temporary , 這是使用了 臨時表。 這種情況也比較影響效率,sql需要改進。或者從應用層進行改進。

如果爲 where used 說明使用了where語句。如果 type爲 all 或者 index ,一般會出現這樣的結果。這樣的問題,一般是查詢需要改進。

在一般稍大的系統中,基本儘可能的減少 join ,子查詢 等等。mysql就使用最簡單的查詢,這樣效率最高。至於 join 等,可以放在應用層去解決。

發佈了27 篇原創文章 · 獲贊 32 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章