MySQL Explain詳解
簡介
執行計劃(query Execution plan)
語法
explain select * from table
explain 中的列
expain出來的信息有10列,
分別是id,select_type,table、type,partitions,possible_keys,key,key_len,ref,rows,Extra,下面對這些字段出現的可能進行解釋:
一、ID
SQL執行的順序的標識,SQL從大到小的執行
ID相同時,執行順序由上至下
如果是子查詢,ID的序號會遞增,ID值越大優先級越高,越先被執行
ID如果相同,可以認為是一組,從上往下順序執行;在所有組中,ID值越大,優先級越高,越先執行
二、select_type
示查詢中每個select子句的類型
SIMPLE:簡單的SELECT,不實用UNION或者子查詢。
PRIMARY:最外層SELECT。
UNION:第二層,在SELECT之后使用了UNION。
DEPENDENT UNION:UNION語句中的第二個SELECT,依賴于外部子查詢。
UNION RESULT:UNION的結果。
SUBQUERY:子查詢中的第一個SELECT。
DEPENDENT SUBQUERY:子查詢中的第一個SELECT,取決于外面的查詢。
DERIVED:導出表的SELECT(FROM子句的子查詢)
MATERIALIZED:物化子查詢
UNCACHEABLE SUBQUERY:無法緩存結果的子查詢,必須為外部查詢的每一行重新計算
UNCACHEABLE UNION:UNION 屬于不可緩存的子查詢的第二個或后一個選擇
三、table
輸出行引用的表的名稱。這也可以是以下值之一:
:該行指的是id值為M和id值為N的并集。
:該行是指用于與該行的派生表結果id的值 N。例如,派生表可以來自FROM子句中的子查詢
:該行指的是id 值為的行的具體化子查詢的結果N
四、type
表示MySQL在表中找到所需行的方式,又稱“訪問類型”。
常用的類型有: NULL, system, const, eq_ref, ref, range, index, ALL(從左到右,性能從差到好)
以下列表描述了從最佳類型到最差類型的連接類型
NULL
MySQL在優化過程中分解語句,執行時甚至不用訪問表或索引,例如從一個索引列里選取最小值可以通過單獨索引查找完成。
system
該表只有一行(如:系統表)。這是const連接類型的特例
const
該表最多只有一個匹配行,在查詢開頭讀取。因為只有一行,所以優化器的其余部分可以將此行中列的值視為常量。 const表非???,因為它們只讀一次。
SELECT * FROM tbl_name WHERE primary_key=1;
SELECT * FROM tbl_name WHERE primary_key_part1=1 AND primary_key_part2=2;
eq_ref
對于前面表格中的每個行組合,從該表中讀取一行。除了 system和 const類型之外,這是最好的連接類型。當連接使用索引的所有部分且索引是 索引PRIMARY KEY或UNIQUE NOT NULL索引時使用它。
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column=other_table.column;
SELECT * FROM ref_table,other_table
WHERE ref_table.key_column_part1=other_table.column
AND ref_table.key_column_part2=1;
ref
表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值
fulltext
使用FULLTEXT 索引執行連接。
ref_or_null
SELECT * FROM ref_table WHERE key_column IS NULL;
index_merge
該指數合并訪問方法檢索與多行 range掃描和他們的結果合并到一個。此訪問方法僅合并來自單個表的索引掃描,而不掃描多個表。合并可以生成其基礎掃描的聯合,交叉或交叉聯合
SELECT * FROM tbl_name WHERE key1 = 10 OR key2 = 20;
SELECT * FROM tbl_name
WHERE (key1 = 10 OR key2 = 20) AND non_key = 30;
SELECT * FROM t1, t2
WHERE (t1.key1 IN (1,2) OR t1.key2 LIKE ‘value%’)
AND t2.key1 = t1.some_col;
SELECT * FROM t1, t2
WHERE t1.key1 = 1
AND (t2.key1 = t1.some_col OR t2.key2 = t1.some_col2);
unique_subquery
此類型替換 以下形式的eq_ref某些 IN子查詢:
value IN (SELECT primary_key FROM single_table WHERE some_expr)
index_subquery
此連接類型類似于 unique_subquery。它替換IN子查詢,但它適用于以下形式的子查詢中的非唯一索引:
value IN (SELECT key_column FROM single_table WHERE some_expr)
range
僅檢索給定范圍內的行,使用索引選擇行。的key 輸出行中的列指示使用哪個索引。將key_len包含已使用的時間最長的關鍵部分。該ref列 NULL適用于此類型。
range當一個鍵柱使用任何的相比于恒定可使用 =, <>, >, >=, , BETWEEN, LIKE,或 IN()運營商:
index
該index聯接類型是一樣的 ALL,只是索引樹被掃描。這種情況有兩種:
如果索引是查詢的覆蓋索引,并且可用于滿足表中所需的所有數據,則僅掃描索引樹。在這種情況下,Extra專欄說 Using index。僅索引掃描通常比ALL索引的大小通常小于表數據更快 。
使用索引中的讀取執行全表掃描,以按索引順序查找數據行。 Uses index沒有出現在 Extra列中。當查詢僅使用屬于單個索引的列時,MySQL可以使用此連接類型。
ALL
對前面表格中的每個行組合進行全表掃描。如果表是第一個未標記的表 const,通常不好,并且在所有其他情況下通常 非常糟糕。通常,您可以ALL通過添加基于常量值或早期表中的列值從表中啟用行檢索的索引來避免
五、possible_keys
該possible_keys列指示MySQL可以選擇在此表中查找行的索引,指出MySQL能使用哪個索引在表中找到記錄,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用
該列完全獨立于EXPLAIN輸出所示的表的次序。這意味著在possible_keys中的某些鍵實際上不能按生成的表次序使用。
如果該列是NULL,則沒有相關的索引。在這種情況下,可以通過檢查WHERE子句看是否它引用某些列或適合索引的列來提高你的查詢性能。如果是這樣,創造一個適當的索引并且再次用EXPLAIN檢查查詢
六、Key
key列顯示MySQL實際決定使用的鍵(索引)
如果沒有選擇索引,鍵是NULL。要想強制MySQL使用或忽視possible_keys列中的索引,在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。
七、key_len
表示索引中使用的字節數,可通過該列計算查詢中使用的索引的長度(key_len顯示的值為索引字段的最大可能長度,并非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的)
不損失精確性的情況下,長度越短越好
八、ref
表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值
九、rows
表示MySQL根據表統計信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數
十、Extra
該Extra列 EXPLAIN輸出包含MySQL解決查詢的額外信息。以下列表說明了此列中可能出現的值。每個項目還指示JSON格式的輸出哪個屬性顯示Extra值。對于其中一些,有一個特定的屬性。其他顯示為message 屬性的文本
十一、partitions(擴展)
記錄將與查詢匹配的分區。僅在使用PARTITIONS關鍵字時才顯示此列 。非分區表顯示null
本文由 貴州做網站公司 整理發布,部分圖文來源于互聯網,如有侵權,請聯系我們刪除,謝謝!
網絡推廣與網站優化公司(網絡優化與推廣專家)作為數字營銷領域的核心服務提供方,其價值在于通過技術手段與策略規劃幫助企業提升線上曝光度、用戶轉化率及品牌影響力。這...
在當今數字化時代,公司網站已成為企業展示形象、傳遞信息和開展業務的重要平臺。然而,對于許多公司來說,網站建設的價格是一個關鍵考量因素。本文將圍繞“公司網站建設價...
在當今的數字化時代,企業網站已成為企業展示形象、吸引客戶和開展業務的重要平臺。然而,對于許多中小企業來說,高昂的網站建設費用可能會成為其發展的瓶頸。幸運的是,隨...
請問是不是每個月1號必須抄稅報稅?稅控面板納稅申報表,按月計算,分為三步:復印納稅申報表和清卡。上月 美國的納稅申報必須在每月15號之前完成。如果一步不夠,面板將被鎖定。詳情請咨詢服務單位。抄稅是指匯總當月的信息,報稅是指將這些匯總的信息提交給國稅客戶端,清卡是指將計算時間移到下月1日。抄稅報稅是在每月幾號進行的?1 .每月1日至15日,金稅盤先抄稅。2.稅務復印完成后,國稅網站申報增值稅申報表。...
電腦沒網怎么裝網卡驅動?電腦可以安裝網卡驅動程序時如何安裝?;t連接到互聯網的步驟如下:首先,我們需要安裝一個名為 "驅動程序向導 "對于沒有連接到互聯網的計算機。您可以使用連接到互聯網的電腦或手機來獲取該軟件,特別是對于可以訪問互聯網的電腦用戶,您可以通過搜索 "驅動程序向導 "并將其安裝在未連接到互聯網的計算機上。運行 "驅動程序向導 "非聯網計算機中的程序。這時程序會自動檢測電腦的非聯網狀態...
北京健康證辦理需要多久?健康證很好辦。只要身體健康,血液正常,最長一周內就會下來。在在北京辦健康證幾天能下來?在哪辦?,快的地方需要3天,慢的地方需要1周。各地區醫院和防疫站都可以辦理。地壇防疫站比較快,地壇北門斜對面。在北京辦理健康證最快幾天取證,哪個地方?:對對對。我預約了在偉康體檢申請健康證,但是我沒有 不要撿起來。我發出后,讓他們工作人員直接郵寄給我。加上辦理時間和快遞時間,我四天就領證了...