MySQL高階 EXPLAIN用法和結果分析

2021-10-05 00:06:31 字數 2359 閱讀 1215

使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的。分析你的查詢語句或是表結構的效能瓶頸。

通過explain,我們可以分析出以下結果:

使用方式如下:

explain +sql語句

explain select * from t1

執行計畫包含的資訊

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

id的結果共有3中情況

指的就是當前執行的表

type所顯示的是查詢使用了哪種型別,type包含的型別包括如下圖所示的幾種:

從最好到最差依次是:

system > const > eq_ref > ref > range > index > all

一般來說,得保證查詢至少達到range級別,最好能達到ref。possible_keys顯示可能應用在這張表中的索引,乙個或多個。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實際使用

key

表示索引中使用的位元組數,可通過該列計算查詢中使用的索引的長度,在不損失精確性的情況下,長度越短越好。key_len顯示的值為索引欄位的最大可能長度,並非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的。

顯示索引的那一列被使用了,如果可能的話,最好是乙個常數。哪些列或常量被用於查詢索引列上的值。

根據表統計資訊及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數,也就是說,用的越少越好

包含不適合在其他列中顯式但十分重要的額外資訊

說明mysql會對資料使用乙個外部的索引排序,而不是按照表內的索引順序進行讀取。mysql中無法利用索引完成的排序操作稱為「檔案排序」。

使用了用臨時表儲存中間結果,mysql在對查詢結果排序時使用臨時表。常見於排序order by和分組查詢group by。

表示相應的select操作中使用了覆蓋索引(covering index),避免訪問了表的資料行,效率不錯。如果同時出現using where,表明索引被用來執行索引鍵值的查詢;如果沒有同時出現using where,表明索引用來讀取資料而非執行查詢動作。

表明使用了where過濾

表明使用了連線快取,比如說在查詢的時候,多表join的次數非常多,那麼將配置檔案中的緩衝區的join buffer調大一些。

where子句的值總是false,不能用來獲取任何元組

select * from t_user where id = '1'

and id = '2'

在沒有groupby子句的情況下,基於索引優化min/max操作或者對於myisam儲存引擎優化count(*)操作,不必等到執行階段再進行計算,查詢執行計畫生成的階段即完成優化。

優化distinct操作,在找到第一匹配的元組後即停止找同樣值的動作

MySQL高階 之 explain執行計畫詳解

使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的,分析你的查詢語句或是表結構的效能瓶頸。explain執行計畫包含的資訊 其中最重要的字段為 id type key rows extra 各欄位詳解 idselect查詢的序列號,包含一組數字,表...

用Explain分析Mysql的執行計畫

mysql中對於每條執行語句都有乙個執行計畫,我們用explain sql語句,就可以查詢mysql對該條語句是怎麼執行的,查了多少行,是否用到索引等,以此來幫助我們分析sql語句的效能,改善sql語句的編寫。如下圖 此片文章來記錄一下如何看這一堆東西,每個欄位是啥意思。const 用主鍵的等值查詢...

mysql中索引利用情況(explain用法)

使用explain檢視,如下 1 首先建立表test,語句如下 sql view plain copy create table test a int,b varchar 10 c varchar 10 2 在表中的a,b都建立索引,先後順序是a,b sql view plain copy crea...