系統城裝機大師 - 唯一官網:www.farandoo.com!

當前位置:首頁 > 數據庫 > Mysql > 詳細頁面

The God Who Only Knows Four Words

時間:2020-08-09來源:www.farandoo.com作者:電腦系統城

使用EXPLAIN很簡單,只需要在執行的SQL前面加上EXPLAIN即可

explain select s.sid sid, s.name studentName, s.age age, c.name className from student_class sc, student s, class c; 

執行結果如下:
如何使用explain命令

EXPLAIN中的列

EXPLAIN命令中經常使用到的列有id、

id

id是一個編號,標識SELECT所屬的行。如果在語句當中沒有子查詢或聯合查詢,那么之后有唯一的SELECT,于是每一行在這個列中都顯示1。否則,內層的SELECT語句一般會順序編號,對應于其在語句中的位置。

  • SELECT列中子查詢
    SELECT列中子查詢

  • FROM子句中的子查詢
    FROM子句中的子查詢

  • UNION查詢
    UNION查詢

注意UNION結果總是放在一個匿名臨時表中,之后MySQL將結果讀取到臨時表外。臨時表不在原SQL中出現,因此它的id列是NULL

select_type

select_type列顯示了對應行是簡單還是復雜SELECT,具體如下:

select_type 描述
SIMPLE 簡單查詢,不包含任何復雜的子查詢(FROM子句中的子查詢除外)
PRIMARY 復雜查詢
SUBQUERY 復雜查詢,包含在SELECT列表中的SELECT標記為SUBQUERY
DERIVED 復雜查詢,包含在FROM子句中的查詢
UNION 復雜查詢,在UNION查詢中的第二個和隨后的SELECT被標記為UNION
UNION RESULT 復雜查詢,用來從UNION的匿名臨時表檢索結果的SELECT被標記為UNION RESULT
table

table列顯示了對應行在訪問哪個表。在通常情況下,它相當明了:它就是那個表,或是該表的別名。當FROM子句中有子查詢或有UNION時,table列會變得復雜得多。

  • FROM子句中有子查詢時,table列是<derivedN>,其中N是子查詢的id
  • 當有UNION時,UNION RESULTtable列中包含一個參與UNIONid列表,如<union1,2>
type

type表示的是訪問類型,也就是說MySQL決定如何查找表中的行。下面列表中依次從最差到最優

type 描述
ALL 全表掃描,從頭到尾掃描整個表,效率最差
index 和全表掃描一樣,只是MySQL掃描表時按索引次序進行而不是行,主要優點時避免了排序
range 范圍掃描就是一個有限制的索引掃描,它開始于索引里的某一點,返回匹配這個值域的行。BETWEEN,INOR都屬于這類
ref 這是一種索引訪問(索引查找),它返回所有匹配某個單個值的行。當使用非唯一性索引或者唯一性索引的非唯一性前綴時才會發生
eq_ref 使用這種索引查找,MySQL知道最多只返回一條符合條件的記錄。在使用主鍵或者唯一性索引查找時發生
const、system 當MySQL能對查詢的某部分進行優化并將其轉換成一個常量時,它就會使用這種類型。如果通過將某一行的主鍵放入WHERE子句里的方式來選取次行的主鍵,MySQL就能幫這個查詢轉換為一個常量
NULL 意味著MySQL能在優化階段分解查詢語句,在執行階段甚至用不著再訪問表或索引。如從一個索引列里面選取最小值可以通過單獨查找索引來完成,不需要在執行時訪問表
possible_keys

possible_keys表示查詢可能使用哪些索引,這是基于查詢訪問的列和使用的比較操作符來判斷的

key

key顯示了MySQL決定采用哪個索引來優化對表的訪問。如果該索引沒有出現在possible_keys列中,那么MySQL可能選擇了一個覆蓋索引,哪怕沒有WHERE子句

key_len

key_len顯示了MySQL在索引字段中可能的最大長度。當索引字段是多個時,長度為多個字段長度的和,每個字段的長度是根據定義的表結構中的長度來計算的

ref

ref顯示了之前的表在key列記錄的索引中查找值所用的列或常量。

rows

rows表示估計為了找到所需的行而要讀取的行數。這個值越小越好

filtered

filtered顯示的是針對表里符合某個條件的記錄數的百分比所做的一個悲觀估算。如果你把rows列和這個百分比相乘,就能看到MySQL估算它將和查詢計劃里面一個表關聯的行數。

Extra

Extra包含的是不適合在其他列顯示的額外信息。具體如下:

Extra 描述
Using index 意味著MySQL使用覆蓋索引,避免訪問表
Using where 意味著MySQL服務器將在存儲引擎檢索行后再進行過濾,并不是所有的WHERE條件查詢都有
Using temporary 意味著MySQL在對查詢結果排序時使用一個臨時表
Using filesort 意味著MySQL會對結果使用一個外部索引排序,而不是按索引次序從表里讀取行
Range checked for each record (index map: N) 這個值意味著沒有好用的索引,新的索引將在聯接的每一行上重新估算。工作中暫時沒有遇到

以上內容如有描述錯誤的地方希望大家可以幫忙指出,一起交流學習!

分享到:

相關信息

系統教程欄目

欄目熱門教程

人氣教程排行

站長推薦

熱門系統下載

jlzzjlzz亚洲乱熟在线播放