1. 程式人生 > >EXPLAIN命令詳解

EXPLAIN命令詳解

  • id d是用來順序標識整個查詢中SELELCT 語句的,在巢狀查詢中id越大的語句越先執行。該值可能為NULL,如果這一行用來說明的是其他行的聯合結果。
  • select_type 表示查詢的型別
simple  簡單子查詢,不包含子查詢和union
primary 包含union或者子查詢,最外層的部分標記為primary
subquery    一般子查詢中的子查詢被標記為subquery,也就是位於select列表中的查詢
derived 派生表——該臨時表是從子查詢派生出來的,位於form中的子查詢
union   位於union中第二個及其以後的子查詢被標記為union,第一個就被標記為primary如果是union
位於from中則標記為derived union result 用來從匿名臨時表裡檢索結果的select被標記為union result dependent union 顧名思義,首先需要滿足UNION的條件,及UNION中第二個以及後面的SELECT語句,同時該語句依賴外部的查詢 subquery 子查詢中第一個SELECT語句 dependent subquery 和DEPENDENT UNION相對UNION一樣
  • 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。
All 最壞的情況,全表掃描
index   和全表掃描一樣。只是掃描表的時候按照索引次序進行而不是行。主要優點就是避免了排序, 但是開銷仍然非常大。如在Extra列看到Using index,說明正在使用覆蓋索引,只掃描索引的資料,它比按索引次序全表掃描的開銷要小很多
range   範圍掃描,一個有限制的索引掃描。key 列顯示使用了哪個索引。當使用=、 <>、>、>=、<、<=、IS NULL、<=>、BETWEEN 或者 IN 操作符,用常量比較關鍵字列時,可以使用 range
ref 一種索引訪問,它返回所有匹配某個單個值的行。此類索引訪問只有當使用非唯一性索引或唯一性索引非唯一性字首時才會發生。這個型別跟eq_ref不同的是,它用在關聯操作只使用了索引的最左字首,或者索引不是UNIQUE和PRIMARY KEY。ref可以用於使用=或<=>操作符的帶索引的列。
eq_ref  最多隻返回一條符合條件的記錄。使用唯一性索引或主鍵查詢時會發生 (高效)
const   當確定最多隻會有一行匹配的時候,MySQL優化器會在查詢前讀取它而且只讀取一次,因此非常快。當主鍵放入where子句時,mysql把這個查詢轉為一個常量(高效)
system  這是const連線型別的一種特例,表僅有一行滿足條件。
Null    意味說mysql能在優化階段分解查詢語句,在執行階段甚至用不到訪問表或索引(高效)
  • 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查詢優化器執行查詢的過程中對查詢計劃的重要補充資訊。
Using filesort  MySQL有兩種方式可以生成有序的結果,通過排序操作或者使用索引,當Extra中出現了Using filesort 說明MySQL使用了後者,但注意雖然叫filesort但並不是說明就是用了檔案來進行排序,只要可能排序都是在記憶體裡完成的。大部分情況下利用索引排序更快,所以一般這時也要考慮優化查詢了。使用檔案完成排序操作,這是可能是ordery bygroup by語句的結果,這可能是一個CPU密集型的過程,可以通過選擇合適的索引來改進效能,用索引來為查詢結果排序。
Using temporary 用臨時表儲存中間結果,常用於GROUP BYORDER BY操作中,一般看到它說明查詢需要優化了,就算避免不了臨時表的使用也要儘量避免硬碟臨時表的使用。
Not exists  MYSQL優化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標準的行, 就不再搜尋了。
Using index 說明查詢是覆蓋了索引的,不需要讀取資料檔案,從索引樹(索引檔案)中即可獲得資訊。如果同時出現using where,表明索引被用來執行索引鍵值的查詢,沒有using where,表明索引用來讀取資料而非執行查詢動作。這是MySQL服務層完成的,但無需再回表查詢記錄。
Using index condition   這是MySQL 5.6出來的新特性,叫做“索引條件推送”。簡單說一點就是MySQL原來在索引上是不能執行如like這樣的操作的,但是現在可以了,這樣減少了不必要的IO操作,但是隻能用在二級索引上。
Using where 使用了WHERE從句來限制哪些行將與下一張表匹配或者是返回給使用者。注意:Extra列出現Using where表示MySQL伺服器將儲存引擎返回服務層以後再應用WHERE條件過濾。
Using join buffer   使用了連線快取:Block Nested Loop,連線演算法是塊巢狀迴圈連線;Batched Key Access,連線演算法是批量索引連線
impossible where    where子句的值總是false,不能用來獲取任何元組
select tables optimized away    在沒有GROUP BY子句的情況下,基於索引優化MIN/MAX操作,或者對於MyISAM儲存引擎優化COUNT(*)操作,不必等到執行階段再進行計算,查詢執行計劃生成的階段即完成優化。
distinct    優化distinct操作,在找到第一匹配的元組後即停止找同樣值的動作

相關推薦

MYSQL-EXPLAIN 命令 (轉載)

test cacheable sel exp 打開慢 一起 select語句 方式 命令詳解 在工作中,我們用於捕捉性能問題最常用的就是打開慢查詢,定位執行效率差的SQL,那麽當我們定位到一個SQL以後還不算完事,我們還需要知道該SQL的執行計劃,比如是全表掃描,還是索引掃

mysql 學習與提高5:explain命令

目錄 Explain 簡介 Explain 使用 Explain 欄位 1. id欄位 2.select_type 3.table 4.type 5.possible_keys 6.key 7.key_len 8.ref 9.rows 10.ext

EXPLAIN 命令

在工作中,我們用於捕捉效能問題最常用的就是開啟慢查詢,定位執行效率差的SQL,那麼當我們定位到一個SQL以後還不算完事,我們還需要知道該SQL的執行計劃,比如是全表掃描,還是索引掃描,這些都需要通過EXPLAIN去完成。EXPLAIN命令是檢視優化器如何決定執行查詢的主要方法

EXPLAIN命令

id d是用來順序標識整個查詢中SELELCT 語句的,在巢狀查詢中id越大的語句越先執行。該值可能為NULL,如果這一行用來說明的是其他行的聯合結果。 select_type 表示查詢的型別 simple 簡單子查詢,不包含子查詢和union

MySQL EXPLAIN 命令

 在工作中,我們用於捕捉效能問題最常用的就是開啟慢查詢,定位執行效率差的SQL,那麼當我們定位到一個SQL以後還不算完事,我們還需要知道該SQL的執行計劃,比如是全表掃描,還是索引掃描,這些都需要通過EXPLAIN去完成。EXPLAIN命令是檢視優化器如何決定執行查詢的主

tar命令

pan 詳解 time border 設備 lin bsp force names 解壓到指定目錄 tar -zxvf flash_player_npapi_linux.x86_64.tar.gz -C mmtar -zxvf flash_player_npapi_linu

Linux下安裝軟件命令

代碼包 相關信息 make bin 一個 軟件包 輸入 -i bin文件 Linux下軟件安裝方法總結:一、rpm包安裝方式步驟:1、找到相應的軟件包,比如soft.version.rpm,下載到本機某個目錄;2、打開一個終端,su -成root用戶;3、cd soft.v

Docker常用命令

nbsp 詳解 .cn 本地 test 並且 www 更多 top docker ps 查看當前正在運行的容器 docker ps -a 查看所有容器的狀態 docker start/stop id/name 啟動/停止某個容器 docker attach id 進

linux下cat命令

forever ron localhost root sta testing 幫助 查看 一點 1、cat 顯示文件連接文件內容的工具; cat 是一個文本文件查看和連接工具。查看一個文件的內容,用cat比較簡單,就是cat 後面直接接文件名。 比如: de>[[

Linux:at命令

計時 osi 執行 inux days pan 必須 man 一個 at命令 at命令為單一工作調度命令。at命令非常簡單,但是在指定時間上卻非常強大 語法 at [選項] time at > 執行的命令 ctrl+d 選項 -m :當指定的任務被

grep命令

命令詳解 顯示 不包含 文件 開頭 文件中查找 時間 匹配 nbsp grep命令 1、grep "li qq" * 在的有文件中查找li qq文件。 2、grep -c "file" a 在a文件中有多少行匹配到file。 3、grep -n "

linux 之awk命令

數學函數 mat loop 多次 finished 數組結構 save pre 新的 awk是一種程序語言,對文檔資料的處理具有很強的功能。awk名稱是由它三個最初設計者的姓氏的第一個字母而命名的: Alfred V. Aho、Peter J. We i n b e rg

【轉】linux之cp/scp命令+scp命令

特殊 是否 用戶登錄 usr 指定 highlight 顯示 檔案 三種 linux之cp/scp命令+scp命令詳解 名稱:cp 使用權限:所有使用者 使用方式: cp [options] source dest cp [options] source

xargs命令

文件名 過程 介紹 pri .sh 例如 接收 替換字符 welcom xargs命令是把接收到的數據重新格式化,再將其作為參數提供給其他命令,下面介紹xargs命令的各種使用技巧 一、將多行輸入轉換成單行輸入: [[email protected]/* */

Linux netstat命令,高級面試必備

bytes tool head osi ngs 進行 pen 通信 詳細信息 簡介 Netstat 命令用於顯示各種網絡相關信息,如網絡連接,路由表,接口狀態 (Interface Statistics),masquerade 連接,多播成員 (Multicast Mem

Linux下的tar壓縮壓縮命令

命令 .tar.gz 需要 logo 意思 追加 lin 產生 ron tar -c: 建立壓縮檔案-x:解壓-t:查看內容-r:向壓縮歸檔文件末尾追加文件-u:更新原壓縮包中的文件 這五個是獨立的命令,壓縮解壓都要用到其中一個,可以和別的命令連用但只

linux top 命令

ctrl+ 一次 所有 使用方法 ase 隱藏 統計 ini 前臺 top命令是Linux下常用的性能分析工具,能夠實時顯示系統中各個進程的資源占用狀況,類似於Windows的任務管理器。下面詳細介紹它的使用方法。top - 01:06:48 up 1:22, 1 user

Shell find命令

一個 打印 文件訪問 perm mtime -o 多次 所有者 cut 查找文件find ./ -type f查找目錄find ./ -type d查找名字為test的文件或目錄find ./ -name test查找名字符合正則表達式的文件,註意前面的‘.*’(查找到的文

Find命令整理

find命令詳解整理Findlocate 搜索命令 使用:#yum install -y mlocate 安裝updatedb 生成db數據庫,服務器不建議在工作時間生成,使用計劃任務在淩晨啟動 #find /etc/ -name ‘sshd*‘ 模糊搜索,搜索/etc目錄下name為sshd的

tcpdump命令--

tcpdump命令詳解tcpdump是工作中必用的一道指令,如果熟悉掌握,將會很快的幫你解決問題!文章寫的有點多,但是我認為都很有用!先看看tcpdump的具體參數及意義:-i:指定tcpdump監聽的網絡接口-s:指定要監聽數據包的長度-c:指定要監聽的數據包數量,達到指定數量後自動停止抓包-w:指定將監聽