刷面試題的時候,不知道大家有沒有見過MySQL這兩個命令:explain和profile(反正我就見過了)..面試
以前雖然知道這兩個命令大概什麼意思,但一直沒有去作筆記。今天發現本身的TODO LIST有這麼兩個命令,因而打算來學習一番,記錄一下~數據庫
使用的MySQL的版本爲5.6.38緩存
1、explain命令bash
1.1體驗explain命令架構
首先咱們來體驗一下explain命令是怎麼使用的,以及輸出的結果是什麼:性能
explain select * from table_user ;
複製代碼
輸出結果:學習
發現很使用起來很簡單,只要explain後邊跟着SQL語句就完事了(MySQL5.6以前的版本,只容許解釋SELECT語句,從 MySQL5.6開始,非SELECT語句也能夠被解釋了)。優化
1.2爲何須要explain命令 咱們不少時候編寫完一條SQL語句,每每想知道這條SQL語句執行是否高效。或者說,咱們創建好的索引在這條SQL語句中是否使用到了,就可使用explain命令來分析一下!spa
經過explain命令咱們能夠知道如下信息:表的讀取順序,數據讀取操做的類型,哪些索引可使用,哪些索引實際使用了,表之間的引用,每張表有多少行被優化器查詢等信息。code
// 好了,咱們下面看一下explain出來的結果是怎麼看的。
1.3讀懂explain命令結果
explain命令輸出的結果有10列:id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra
1.3.1id
包含一組數字,表示查詢中執行SELECT子句或操做表的順序。
在id列上也會有幾種狀況:
若是id相同執行順序由上至下。
若是id不相同,id的序號會遞增,id值越大優先級越高,越先被執行。
(通常有子查詢的SQL語句id就會不一樣)
1.3.2select_type
表示select查詢的類型
select_type屬性下有好幾種類型:
類型有點多啊,我加粗的是最多見的,起碼要看得懂加粗的部分。
複製代碼
1.3.3table
該列顯示了對應行正在訪問哪一個表(有別名就顯示別名)。
當from子句中有子查詢時,table列是 格式,表示當前查詢依賴 id=N的查詢,因而先執行 id=N 的查詢
1.3.4type
該列稱爲關聯類型或者訪問類型,它指明瞭MySQL決定如何查找表中符合條件的行,同時是咱們判斷查詢是否高效的重要依據。
如下爲常見的取值
1.3.5possible_keys
這一列顯示查詢可能使用哪些索引來查找
1.3.6key
這一列顯示MySQL實際決定使用的索引。若是沒有選擇索引,鍵是NULL。
1.3.7key_len
這一列顯示了在索引裏使用的字節數,當key列的值爲 NULL 時,則該列也是 NULL
1.3.8ref
這一列顯示了哪些字段或者常量被用來和key配合從表中查詢記錄出來。
1.3.9rows
這一列顯示了估計要找到所需的行而要讀取的行數,這個值是個估計值,原則上值越小越好。
1.3.10extra
其餘的信息
常見的取值以下:
最後
本來覺得Explain命令是比較難學的,但查找資料看下來,以前只是不知道具體的列和列中下的屬性是什麼意思而已。常見出現的其實也就那麼幾個,感受對着每一個屬性多看一會,仍是能夠能看懂的。
歡迎你們和我一塊兒學習交流構建Java雲架構,我這邊會將近期研發的Java雲架構的搭建過程和精髓記錄下來,幫助更多有興趣研發Java高級架構的朋友,你們來一塊兒探討Java高級架構的搭建過程及如何運用於企業項目。
我本人邀約各大BATJ架構大牛共創Java高級架構交流社區羣,(羣號:673043639)致力於免費提供Java架構行業交流平臺,經過這個平臺讓你們相互學習成長,提升技術,讓本身的水平進階一個檔次,成功通往Java架構技術大牛或架構師發展。
但願此文能幫到你們的同時,也聽聽你們的觀點。歡迎留言討論,加關注,分享你的高見!持續更新!
To-陌霖Java架構
分享互聯網最新文章 關注互聯網最新發展