mysql語句查詢時間檢測


explain的使用

1.首先我們是要登入你的mysql的,然后選擇數據庫輸入:use 你要選擇的庫名

2執行語句

eg:  explain SELECT * FROM wish_orders1412 LEFT JOIN wish_products1412 ON wish_orders1412.id = wish_products1412.order_id LIMIT 0 , 30;

 

 在對某個Query優化過程中,須要不斷地使用explain來驗證各種調整是否有效。

  MySQL explain功能展示的各種信息的解釋如下:

id: MySQL Query Optimizer 選定的執行計划中查詢的序列號。

select_type: 所使用的查詢類型,主要有以下這幾種查詢類型。

  • DEPENDENT SUBQUERY:子查詢內層的第一個select,依賴於外部查詢的結果集。
  • DEPENDENT UNION:子查詢中的union,且為union中從第二個select開始的后面所有的select,同樣依賴於外部查詢的結果集。
  • PRIMARY:子查詢中的最外層查詢,注意並不是主鍵查詢。
  • SIMPLE:除子查詢或者union之外的其他查詢。
  • SUBQUERY:子查詢內層查詢的第一個select,結果不依賴於外部查詢的結果集。
  • UNCACHETABLE SUBQUERY:結果集無法緩存的子查詢。
  • UNION:union語句中第二個select開始后面的所有select,第一個select為primary。
  • UNION RESULT:union中的合並結果。

table:顯示這一步所訪問的數據庫中的表的名稱。

type:告訴我們隊表使用的訪問方式,主要包含如下幾種類型。

  • all:全表掃描。
  • const:讀常量,最多只會有一條記錄匹配,由於是常量,實際上只須要讀一次。
  • eq_ref:最多只會有一條匹配結果,一般是通過主鍵或唯一鍵索引來訪問。
  • fulltext:進行全文索引檢索。
  • index:全索引掃描。
  • index_merge:查詢中同時使用兩個(或更多)索引,然后對索引結果進行合並,再讀取表數據。
  • index_subquery:子查詢中的返回結果字段組合是一個索引(或索引組合),但不是一個主鍵或唯一索引。
  • rang:索引范圍掃描。
  • ref:join語句中唄驅動表索引引用的查詢。
  • ref_or_null:與ref的唯一區別就是在使用索引引用的查詢之外再增加一個空值的查詢。
  • system:系統表,表中只有一行數據。
  • unique_subquery:子查詢中的返回結果字段組合是主鍵或者唯一約束。

Possible_keys:該查詢可以利用的索引。如果沒有任何索引可以使用,就是顯示成null,這項內容對優化索引時的調整非常重要。

key: MySQL Query Optimizer 從possible_keys中選擇使用的索引。

key_len:被選中使用索引的索引鍵長度。

ref:列出是通過常量(const),還是某個表的某個字段(如果是jion)來過了(通過key)的。

rows:MySQL Query Optimizer 通過系統收集的統計信息估算出來的結果集記錄條數。

extra:查詢中每一步實現的額外細節信息,主要會有以下內容

distinct:查找distinct值,當mysql找到第一條匹配的結果時,將停止該值的查詢,轉為后面其他值的查詢。

full scan on null key: 子查詢中的一種優化方式,主要在遇到無法通過索引訪問null值的使用。

impossible where noticed after reading const tables:MySQL Query Optimizer 通過收集到的統計信息判斷出不可能存在結果。

no tables:query語句中使用from dual 或不包含任何from子句。

not exists:在某些左連接中,MySQL Query Optimizer通過改變原有的Query的組成而使用的優化方法,可以部分減少數據訪問次數。

range checked for each record (index map:N):通過MySql官方手冊的描述,當MySQL Query Optimizer沒有發現好的可以使用的索引時,如果發現前面表的列值已知,部分索引可以使用。對前面表的每個行組合,MySql檢查是否可以使用 range 或index_merge訪問方法來索引行。

select tables optimized away:當我們使用某些聚合函數來訪問存在的索引的某個字段時,MySQL Query Optimizer會通過索引直接一次定位到所需的數據行完成整個查詢,當然,前提是在Query中不能有group by操作。

using filesort:當Query中包含order by操作,而且無法利用索引完成排序操作的時候,MySQL Query Optimizer不得不選擇相應的排序算法來實現。

using index:所需數據只需在index即可全部獲得,不需要在到表中取數據。

using index for group-by:數據訪問和using index一樣,所需數據只須要讀取索引,當Query中使用group by 或 distinct子句時,如果分組字段也在索引中,信息就會顯示這個。

using temporary:當MySQL在某些操作中必須使用臨時表時,在extra信息中就會出現這個。主要常見於group by 和order by等操作中。

using where:如果不讀取表的所有數據,或不是僅僅通過索引就可以獲取所有須要的數據,則會出現using where信息。

using where with pushed condition:這是一個僅僅在NDBCluster存儲引擎中才會出現的信息,而且還需要通過打開condition pushdown優化功能才可能被使用。控制參數為 engine_condition_pushdown


免責聲明!

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



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