怎么去看懂mysql的執行計划


mysql的執行計划

EXPLAIN SELECT * from employees where employees.gender='M' 

返回的結果如下:

 

id是一組數字,表示查詢中執行select子句或操作表的順序。

如果id相同,則執行順序從上至下。

如果是子查詢,id的序號會遞增,id越大則優先級越高,越先會被執行。

id如果相同,則可以認為是一組,從上往下順序執行,所有組中,id越高,優先級越高,越容易執行。

selecttype有simple,primary,subquery,derived(衍生),union,unionresult。

simple表示查詢中不包含子查詢或者union。

當查詢中包含任何復雜的子部分,最外層的查詢被標記成primary。

在select或where列表中包含了子查詢,則子查詢被標記成subquery。

在from的列表中包含的子查詢被標記成derived。

若第二個select出現在union后,則被標記成union,若union在from子句的子查詢中,外層的select被標記成derived。

從union表獲取結果的select被標記成union result。

type叫訪問類型,表示在表中找到所需行的方式,常見類型有

all,index,range,ref,eq_ref,const,system,NULL 性能從左至右由差至好。

ALL,即full table scan,mysql將遍歷全表來找到所需要的行。

index為full index scan,只遍歷索引樹。

range表示索引范圍掃描 ,對索引的掃描開始於一點,返回匹配的值域的行,常見於between,<,>的查詢。

ref為非唯一性索引掃描,返回匹配某個單獨值的所有行,常見於非唯一索引即唯一索引的非唯一前綴進行的查找。

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

NULL表示在執行語句中,不用查表或索引。

possiblekey表示能使用哪個索引在表中找到行,查詢涉及到的字段上若存在索引,則該索引被列出,但不一定被查詢使用。

 


免責聲明!

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



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