面試前必須知道的MySQL命令 explain

2021-09-19 21:43:33 字數 2156 閱讀 9371

只有光頭才能變強

刷面試題的時候,不知道你們有沒有見過mysql這兩個命令:explainprofile(反正我就見過了)..

之前雖然知道這兩個命令大概什麼意思,但一直沒有去做筆記。今天發現自己的todo list有這麼兩個命令,於是打算來學習一番,記錄一下~

使用的mysql的版本為5.6.38

首先我們來體驗一下explain命令是怎麼使用的,以及輸出的結果是什麼:

explain select * from table_user ;
輸出結果:

發現很使用起來很簡單,只要explain後邊跟著sql語句就完事了(mysql5.6之前的版本,只允許解釋select語句,從 mysql5.6開始,非select語句也可以被解釋了)。

我們很多時候編寫完一條sql語句,往往想知道這條sql語句執行是否高效。或者說,我們建立好的索引在這條sql語句中是否使用到了,就可以使用explain命令來分析一下!

通過explain命令我們可以知道以下資訊:表的讀取順序,資料讀取操作的型別,哪些索引可以使用,哪些索引實際使用了,表之間的引用,每張表有多少行被優化器查詢等資訊。

// 好了,我們下面看一下explain出來的結果是怎麼看的。

explain命令輸出的結果有10列:id、select_type、table、type、possible_keys、key、key_len、ref、rows、extra

包含一組數字,表示查詢中執行select子句或操作表的順序

在id列上也會有幾種情況:

表示select查詢的型別

select_type屬性下有好幾種型別:

型別有點多啊,我加粗的是最常見的,起碼要看得懂加粗的部分。

該列顯示了對應行正在訪問哪個表(有別名就顯示別名)。

當from子句中有子查詢時,table列是格式,表示當前查詢依賴id=n的查詢,於是先執行id=n的查詢

該列稱為關聯型別或者訪問型別,它指明了mysql決定如何查詢表中符合條件的行,同時是我們判斷查詢是否高效的重要依據

以下為常見的取值

這一列顯示查詢可能使用哪些索引來查詢

這一列顯示mysql實際決定使用的索引。如果沒有選擇索引,鍵是null。

這一列顯示了在索引裡使用的位元組數,當key列的值為 null 時,則該列也是 null

這一列顯示了哪些字段或者常量被用來和key配合從表中查詢記錄出來。

這一列顯示了估計要找到所需的行而要讀取的行數,這個值是個估計值,原則上值越小越好。

其他的資訊

常見的取值如下:

原本以為explain命令是比較難學的,但查詢資料看下來,之前只是不知道具體的列和列中下的屬性是什麼意思而已。常見出現的其實也就那麼幾個,感覺對著每個屬性多看一會,還是可以能看懂的。

當然了,在《高效能mysql》中也有複雜的sql語句來分析(但我認為我們一般不會寫到那麼複雜)..

mysql explain 命令詳解:

mysql系列_explain執行計畫:

mysql explain詳解

如果你覺得我寫得還不錯,了解一下:

面試前必須知道的MySQL命令 explain

只有光頭才能變強 刷面試題的時候,不知道你們有沒有見過mysql這兩個命令 explain和profile 反正我就見過了 之前雖然知道這兩個命令大概什麼意思,但一直沒有去做筆記。今天發現自己的todo list有這麼兩個命令,於是打算來學習一番,記錄一下 使用的mysql的版本為5.6.38 首先...

MySQL必須知道的點

mysql已經成為世界上最受歡迎的資料庫管理系統之一,無論是用在小型開發專案上,還是用在構建那較大型的 mysql都用實力證明了自己是乙個穩定 可靠 快速 可信的系統,足以勝任任何資料儲存業務的需要。使用過程中,這些點你都知道嗎?1.必須使用innodb儲存引擎 有更好的cpu和io效能,更好的備份...

你必須知道的HashMap面試題

hashmap基於hash原理,通過put 和get 方法儲存和獲取元素。它內部使用陣列 鍊錶或紅黑樹的結構,通過hash運算找到bucket位置來儲存entey物件,通過equals 方法找到正確的鍵值對。hashmap使用鏈位址法來解決hash碰撞問題,當發生碰撞時,物件會儲存在鍊錶的下乙個節點...