mysql const ref_mysql explain详解
不得不了解一些explain的用法。
首先看看輸出地參數:
這些參數中,我們常常需要關心的是這幾個參數
1,select_type,就是select類型.主要有這幾種,
SIMPLE:這個是簡單的sql查詢,不使用UNION或者子查詢
PRIMARY:子查詢中最外層的select
UNION:UNION中的第二個或后面的SELECT語句
DEPENDENT UNION:UNION中的第二個或后面的SELECT語句,取決于外面的查詢
UNION RESULT:UNION的結果。
SUBQUERY:子查詢中的第一個SELECT.
DEPENDENT SUBQUERY:子查詢中的第一個SELECT,取決于外面的查詢
DERIVED:派生表的SELECT(FROM子句的子查詢)
2,table 輸出行所引用的表
3,type 結類型。各種類型的信息在下面給出。
system
表僅有一行(=系統表)。這是const聯結類型的一個特例。
const
表有最多一個匹配行,它將在查詢開始時被讀取。因為僅有一行,在這行的列值可被剩下的優化器認為是常數。
const表很快,因為它們只讀取一次!
eq_ref
對于每個來自于先前的表的行組合,從該表中讀取一行。這可能是最好的聯結類型,除了const類型。它用在一個索引的所有部分被聯結使用并且索引是UNIQUE或PRIMARY
KEY。
ref
對于每個來自于先前的表的行組合,所有有匹配索引值的行將從這張表中讀取。
如果聯結只使用鍵的最左面前綴,不或如果鍵不是UNIQUE或PRIMARY
KEY(換句話說,如果聯結能基于鍵值選擇單個行的話),使用ref。如果被使用的鍵僅僅匹配一些行,該聯結類型是不錯的。
range
只有在一個給定范圍的行將被檢索,使用一個索引選擇行。ref列顯示哪個索引被使用。
index
這與ALL相同,除了只有索引樹被掃描。這通常比ALL快,因為索引文件通常比數據文件小。
ALL
對于每個來自于先前的表的行組合,將要做一個完整的表掃描。
如果表格是第一個沒標記const的表,這通常不好,并且通常在所有的其他情況下很差。你通常可以通過增加更多的索引來避免ALL,使得行能從早先的表中基于常數值或列值被檢索出。
從上面可以發現,從上至下依次是越來越壞的結果,當然最好的還是Null,沒有查詢本表。
4,possible_keys:possible_keys列指出MySQL能使用哪個索引在該表中找到行5,key:key列顯示MySQL實際決定使用的鍵。如果沒有索引被選擇,鍵是NULL。6,key_len key_len列顯示MySQL決定使用的鍵長度。如果鍵是NULL,長度是NULL。注意這告訴我們MySQL將實際使用一個多部鍵值的幾個部分。7 ref:ref列顯示哪個列或常數與key一起用于從表中選擇行。8,rows rows列顯示MySQL相信它必須檢驗以執行查詢的行數。9,Extra如果是Only index,這意味著信息只用索引樹中的信息檢索出的。通常,這比掃描整個表要快。
如果是where used,它意味著一個WHERE子句將被用來限制哪些行與下一個表匹配或發向客戶。
如果是impossible where 表示用不著where
如果是Using filesort表示用到了文件排序,通常在數據量大的情況下,要減少這種查詢
-------------------------------------------------------------------------------------------
type
聯合查詢所使用的類型。
type顯示的是訪問類型,是較為重要的一個指標,結果值從好到壞依次是:
system > const > eq_ref
> ref > fulltext >
ref_or_null > index_merge >
unique_subquery > index_subquery >
range > index > ALL
一般來說,得保證查詢至少達到range級別,最好能達到ref。
possible_keys
指出MySQL能使用哪個索引在該表中找到行。如果是空的,沒有相關的索引。這時要提高性能,可通過檢驗WHERE子句,看是否引用某些字段,或者檢查字段不是適合索引。
key
顯示MySQL實際決定使用的鍵。如果沒有索引被選擇,鍵是NULL。
key_len
顯示MySQL決定使用的鍵長度。如果鍵是NULL,長度就是NULL。文檔提示特別注意這個值可以得出一個多重主鍵里mysql實際使用了哪一部分。
ref
顯示哪個字段或常數與key一起被使用。
rows
這個數表示mysql要遍歷多少數據才能找到,在innodb上是不準確的。
Extra
如果是Only index,這意味著信息只用索引樹中的信息檢索出的,這比掃描整個表要快。
如果是where used,就是使用上了where限制。
如果是impossible where 表示用不著where,一般就是沒查出來啥。
如果此信息顯示Using filesort或者Using temporary的話會很吃力,WHERE和ORDER
BY的索引經常無法兼顧,如果按照WHERE來確定索引,那么在ORDER BY時,就必然會引起Using
filesort,這就要看是先過濾再排序劃算,還是先排序再過濾劃算。
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的mysql const ref_mysql explain详解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中最大值最小值平均值_来自l
- 下一篇: mysql设置参数0和1_MySQL 8