mysql explain使用方法

2021-05-23 00:23:33 字數 2655 閱讀 1838

explain

顯示了 mysql

如何使用索引來處理 select

語句以及連線表。可以幫助選擇更好的索引 和寫出更優化的查詢語句。

使用方法,在 select

語句前加上 explain

就可以了:

如: explain select surname,first_name form a,b  where  a.id=b.id

分析結果形式如下:

table

type

possible_keys

keykey_len

refrows

extra a

range id

first_name

first_name 9

null

23112

using where

using temporary

using filesort b

ref id

first_name id

4 id

2using where

explain

列的解釋:

table

顯示這一行的資料是關於哪張表的

type

這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const 、eq_reg 、ref 、range 、indexhe 和all

possible_keys

顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where 語句中選擇乙個合適的語句

key

實際使用的索引。如果為null ,則沒 有使用索引。很少的情況下,mysql 會選擇優化不足的索引。這種情況下,可以在select 語句中使用use index (indexname )來強制使用乙個索引或者用ignore index (indexname )來強制mysql 忽 略索引

key_len

使用的索引的長度。在不損失精確性的情況下,長度越短越好

ref

顯示索引的哪一列被使用了,如果可能的話,是乙個常數

rows

mysql 認為必須 檢查的用來返回請求資料的行數

extra

關於mysql 如何解析查詢的額外信 息。將在表4.3 中討論,但這裡可以看到的壞的例子是using temporary 和using filesort ,意思mysql 根本不能使用索引,結果是檢索會很慢

extra

列 返回的描述的意義

distinct

一旦mysql 找到了與行相聯合匹配的 行,就不再搜尋了

not exists

mysql 優化了left join ,一旦它找到了匹配left join 標 準的行,

就不再搜尋了

range checked for each

record (index map:# )

沒有找到理想的索引,因此對於從前面表中來的每乙個

行組合,mysql 檢查使用哪個索引, 並用它來從表中返回行。

這是使用索引的最慢的連線之一

using filesort

看到這個的時候,查詢就需要優化了。mysql 需 要進行額外的步驟

來發現如何對返回的行排序。它根據連線型別以及儲存排序鍵值和

匹配條件的全部行的行指標來排序全部行

using index

列資料是從僅僅使用了索引中的資訊而沒有讀取實際的行動的表返回的,

這發生在對錶的全部的請求列都是同乙個索引的部分的時候

using temporary

看到這個的時候,查詢需要優化了。

這裡,mysql 需要建立乙個臨時表來 儲存結果,

這通常發生在對不同的列集進行order by 上, 而不是group by 上

where used

使用了where 從句來限制哪些行將與 下一張表匹配或者是返回給使用者。

如果不想返回表中的全部行,並且連線型別all 或index ,這就會發生,

或者是查詢有問題

不同連線型別的解釋(按照效率高低的順序排序)

system

表只有一行:system 表。這是const 連線型別的特殊情況

const

表中的乙個記錄的最大值能夠匹配這個查詢(索引可以是主鍵或惟一索引)。因為只有一行,這個值 實際就是常數,因為mysql 先讀這個值然後把它當做常數來對待

eq_ref

在連線中,mysql 在查詢時,從前面 的表中,對每乙個記錄的聯合都從表中讀取乙個記錄,它在查詢使用了索引為主鍵或惟一鍵的全部時使用

ref

這個連線型別只有在查詢使用了不是惟一或主鍵的鍵或者是這些型別的部分(比如,利用最左邊前 綴)時發生。對於之前的表的每乙個行聯合,全部記錄都將從表中讀出。這個型別嚴重依賴於根據索引匹配的記錄多少— 越 少越好

range

這個連線型別使用索引返回乙個範圍中的行,比如使用》 或< 查詢東西時發生的情況

index

這個連線型別對前面的表中的每乙個記錄聯合進行完全掃瞄(比all 更好,因為索引一般小於表資料)

all

這個連線型別對於前面的每乙個記錄聯合進行完全掃瞄,這一般比較糟糕,應該盡量避免

mysql explain使用方法

explain顯示了mysql如何使用索引來處理select語句以及連線表。可以幫助選擇更好的索引和寫出更優化的查詢語句。使用方法,在select語句前加上explain就可以了 如 explain select surname,first name form a,b where a.id b.id...

MySQL Explain的使用及各引數介紹

select type,查詢的型別 table,輸出 查詢 表的名稱 type,訪問方式 possible keys,可能使用的key 顯示可能使用的索引,沒有則為null,有的話可能是多個,但是不一定全部使用 key,實際使用的索引 key len,表示索引中所使用的位元組數,可通過該列計算查詢中...

mysql explain欄位說明

explain列的解釋 id 查詢的序列號 select type select查詢的型別,主要是區別普通查詢和聯合查詢 子查詢之類的複雜查詢。table 所訪問的資料庫中表的名稱。type 這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const eq reg ref range ...