mysql查詢語句分析 explain/desc用法


explain或desc顯示了mysql如何使用索引來處理select語句以及連接表。可以幫助選擇更好的索引和寫出更優化的查詢語句。

explain 數據表 或 desc 數據表

顯示數據表各字段含義

explain sql 或desc sql

顯示sql執行效率

使用方法,在select語句前加上explain就可以了,如:

explain select * from statuses_status where id=11;

  

1,explain列的解釋
table:查詢的數據表

type:這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、index和all。

possible_keys顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where語句中選擇一個合適的語句

key實際使用的索引。如果為null,則沒有使用索引。很少的情況下,mysql會選擇優化不足的索引。這種情況下,可以在select語句中使用use index(indexname)來強制使用一個索引或者用ignore index(indexname)來強制mysql忽略索引

key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好

ref:顯示索引的哪一列被使用了,如果可能的話,是一個常數

rows:mysql認為必須檢查的用來返回請求數據的行數,mysql完成此請求掃描的行數

extra:關於mysql如何解析查詢的額外信息。將在表4.3中討論,但這里可以看到的壞的例子是using temporary和using filesort,意思mysql根本不能使用索引,結果是檢索會很慢。

2,type中各個值解釋

(1)all:全表掃描,MySQL將遍歷全表以找到匹配的行

(2)index:index與ALL區別為index類型只遍歷索引樹

(3)range:索引范圍掃描,對索引的掃描開始於某一點,返回匹配值域的行。顯而易見的索引范圍掃描是帶有between或者where子句里帶有<, >查詢。當mysql使用索引去查找一系列值時,例如IN()和OR列表,也會顯示range(范圍掃描),當然性能上面是有差異的。

 

(4)ref,使用非唯一索引掃描或者唯一索引的前綴掃描,返回匹配某個單獨值的記錄行。

explain select * from t1 where name='yayun';

(5)eq_ref,類似ref,區別就在使用的索引是唯一索引,對於每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連接中使用primary key或者 unique key作為關聯條件。

explain select t1.name from t1, t2 where t1.id=t2.id;

(6)const,system,當MySQL對查詢某部分進行優化,並轉換為一個常量時,使用這些類型訪問。如將主鍵置於where列表中,MySQL就能將該查詢轉換為一個常量。system是const類型的特例,當查詢的表只有一行的情況下,使用system。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM