2015-11-12 53 views
1

我使用解釋計劃,但我很困惑它的真正含義是什麼。在mysql中解釋計劃的含義

explain extended 
select * 
from (select type_id from con_consult_type cct 
     where cct.consult_id = (select id 
           from con_consult 
           where id = 1)) 
     cctt left join con_type ct on cctt.type_id = ct.id; 

結果是 enter image description here

我谷歌派生的臨時表,但什麼是它的臨時表的SQL?是CTT表? 和步驟2,結果是cctt left join con_type ct on cctt.type_id = ct.id? FK_CONSULT_TO_CONSULT_TYPE是consult_id引用con_consult id列, 如何在sql中使用索引? 得到ctt的所有結果,然後使用索引過濾器?

請幫我解釋一下解釋的含義。

回答

1

這是一個糟糕的查詢,要了解explain輸出的基礎知識,所有子查詢和連接都會發生太多事情。

我可以給出一些要點的運行;

  • 「行」列:少即是更好的,它顯示了有多少行必須由數據庫進行掃描,任何小於幾百好,通常表明它是如何能夠從發現您的數據指標;
  • 「possible_keys」:和「鑰匙」:如果「行」是大,你可能需要tweek你的鑰匙,以提供發動機與一些幫助找到你的數據
  • 「類型」:類型加入

回答你的一些問題;

  • 「臨時表的SQL」 - 它在你的SQL中的第一子查詢
  • 隨着你沒有做任何事情FK_CONSULT_TO_CONSULT_TYPE,發動機已經媒體鏈接就撿起作爲一個指數,這是什麼解釋是說。
  • 查詢分爲3個基本步驟;選擇數據,篩選和加入。解釋中的每一行都是一個或多個這些操作的細節,它可能不一定與SQL的特定部分相關,因爲引擎可能將各個部分合併爲一個。