MySQL EXPLAIN 詳解

2021-03-02 數據分析與開發

(點擊上方公眾號,可快速關注)

來源:高廣超

www.jianshu.com/p/ea3fc71fdc45

如有好文章投稿,請點擊 → 這裡了解詳情

MySQL EXPLAIN命令是查詢性能優化不可缺少的一部分,本文主要講解explain命令的使用及相關參數說明。

EXPLAIN Output Columns

id

id是用來順序標識整個查詢中SELELCT 語句的,在嵌套查詢中id越大的語句越先執行。該值可能為NULL,如果這一行用來說明的是其他行的聯合結果。

select_type

表示查詢的類型

table

對應行正在訪問哪一個表,表名或者別名

關聯優化器會為查詢選擇關聯順序,左側深度優先

當from中有子查詢的時候,表名是derivedN的形式,N指向子查詢,也就是explain結果中的下一列

當有union result的時候,表名是union 1,2等的形式,1,2表示參與union的query id

注意:MySQL對待這些表和普通表一樣,但是這些「臨時表」是沒有任何索引的。

type

type顯示的是訪問類型,是較為重要的一個指標,結果值從好到壞依次是:


system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL ,一般來說,得保證查詢至少達到range級別,最好能達到ref。

possible_keys

顯示查詢使用了哪些索引,表示該索引可以進行高效地查找,但是列出來的索引對於後續優化過程可能是沒有用的

key

key列顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL。要想強制MySQL使用或忽視possible_keys列中的索引,在查詢中使用FORCE INDEX、USE INDEX或者IGNORE INDEX。

key_len

key_len列顯示MySQL決定使用的鍵長度。如果鍵是NULL,則長度為NULL。使用的索引的長度。在不損失精確性的情況下,長度越短越好 。

ref

ref列顯示使用哪個列或常數與key一起從表中選擇行。

rows

rows列顯示MySQL認為它執行查詢時必須檢查的行數。注意這是一個預估值。

Extra

Extra是EXPLAIN輸出中另外一個很重要的列,該列顯示MySQL在查詢過程中的一些詳細信息,MySQL查詢優化器執行查詢的過程中對查詢計劃的重要補充信息。

看完本文有收穫?請轉發分享給更多人

關注「資料庫開發」,提升 DB 技能

相關焦點

  • mysql的explain詳解
    然後我改了一下sql,重新explain一下結果,如下:explain SELECT * FROM article force index(idx_1) WHERE (id < 4054495) AND (book_id = '5164') ORDER BY id desc LIMIT 1\G;
  • mysql性能分析explain之id詳解
    前言在mysql的編程世界裡,有時候我們往往需要對自己編寫的sql語句進行分析,來去查看sql的執行計劃,這個還是很有必要的。這個就是本文講到的使用explain工具來去定位分析。說明由於explain這個分析工具查詢出來的欄位過多,本文主要講第一部分,id的講解。explain作用查看sql的執行計劃,幫助我們分析mysql是如何解析sql語句的。
  • MySQL EXPLAIN 命令詳解
    AND dt >= '2010-01-01';這個UPDATE語句可以被重寫成為下面這樣的SELECT語句:SELECT col1, col2  FROM table1  WHERE id1 = 9  AND dt >= '2010-01-01';在5.6.10版本裡面,是可以直接對dml語句進行explain
  • MySQL EXPLAIN 命令詳解學習
    (點擊上方公眾號,可快速關注)作者:黃杉blog.csdn.net/mchdba/article/details/9190771如有好文章投稿,請點擊 → 這裡了解詳情MySQL EXPLAIN 命令詳解
  • MySQL之Explain詳解
    如果我們想看看某個查詢的執行計劃的話,可以在具體的查詢語句前邊加一個EXPLAIN,就像這樣:mysql> EXPLAIN SELECT 1;+----+---+--+--+-++-+----+-+-++-+| id | select_type | table | partitions | type | possible_keys
  • mysql中explain輸出列之id的用法詳解
    參考mysql5.7 en manual,對列id的解釋:The SELECT identifier. This is the sequential number of the SELECT within the query.
  • MySQL Explain詳解
    命令:可查看SQL語句的執行計劃,查看SQL語句有沒有使用上了索引,有沒有做全表掃描,這都可以通過explain命令來查看。具體操作是:select前添加explain來實現,它可以告訴我們你的語句性能如何。  平常查詢:(MySQL逐條統計,當數據過大時,想看到結果很費時間)
  • MySQL優化:定位慢查詢的兩種方法以及使用explain分析SQL
    確定慢查詢日誌路徑:mysql> show global variables like "datadir";確定慢查詢日誌文件名:mysql> show接下來在確定慢查詢日誌後可以通過:tail -n5 /data/mysql/mysql-slow.log 命令查看
  • MySQL的explain詳解
    explain 執行計劃分析目前可以對select update insert replace delete 進行分析可以從explain知道sql如何使用索引聯接查詢的執行順序查詢掃描的數據行數例如:id:1select_type:simpletable: product_commentpartitions
  • 什麼是MySQL的執行計劃(Explain關鍵字)?
    本文示例使用的資料庫表Explain命令(關鍵字)explain簡單示例mysql>explain select * from t_user;此時可以用explain extended+show warnings查看執行結果。explain extended select * from (select * from t_user where user_id = 1) tmp;show warnings;
  • mysql explain詳解
    Explain各欄位含義Using filesort :說明 mysql 會對數據使用一個外部的索引排序, 而不是按照表內的索引順序進行讀取。MySQL 中無法利用索引完成的排序操作稱為「文件排序」Using temporary :使了用臨時表保存中間結果,MySQL 在對查詢結果排序時使用臨時表。
  • MySQL高級知識(四)——Explain
    explain(執行計劃),使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道MySQL是如何處理sql語句。explain主要用於分析查詢語句或表結構的性能瓶頸。註:本系列隨筆如無特殊說明都MySQL版本都為5.7.22。
  • 一文詳解MySQL權限
    * from columns_priv where user=『root』 and host=『localhost』; ##無記錄mysql> select * from procs_priv where user=『root』 and host=『localhost』;MySQL權限詳解(1)All/All
  • SQL中EXPLAIN命令詳解
    explain裡面最關注以下幾列:type本次查詢表聯接類型,從這裡可以看到本次查詢大概的效率key最終選擇的索引,如果沒有索引的話,本次查詢效率通常很差key_len本次查詢用於結果過濾的索引實際長度
  • 全網最全 | MySQL EXPLAIN 完全解讀
    ● 在MySQL 5.7之前,想要顯示此欄位需使用explain extended命令;● MySQL.5.7及更高版本,explain默認就會展示filteredExtra1:Child of 'table' pushed join@1例如查詢語句SELECT ...
  • Mysql Limit 字句優化
    Time: 0.005smysql root@localhost:test_db> explain select * from tbl6 limit 800000,10;+-++----+----+---+--+---+-+---+---+--+----+| id | select_type | table | partitions
  • MySQL資料庫實例管理器命令行選項詳解
    首頁 > 語言 > 關鍵詞 > 資料庫最新資訊 > 正文 MySQL資料庫實例管理器命令行選項詳解
  • PHP mysql中limit用法詳解(代碼示例)
    php $link = mysqli_connect("localhost", "root", "", "Mydb");    if ($link == = false) {     die("ERROR: Could not connect. ".mysqli_connect_error()); }
  • Mysql的limit用法與幾種分頁形式
    不用擔心,mysql已經為我們提供了這樣一個功能。 SELECT * FROM table LIMIT [offset,] rows | rows OFFSET offset  LIMIT 子句可以被用於強制 SELECT 語句返回指定的記錄數。LIMIT 接受一個或兩個數字參數。參數必須是一個整數常量。
  • php mysql PDO 查詢操作的實例詳解
    http://www.jb51.net/article/124388.htm這篇文章主要介紹了php mysql PDO