MySQL效能優化之explain

2021-09-29 12:52:55 字數 1347 閱讀 3731

在日常工作中,我們會有時會開慢查詢去記錄一些執行時間比較久的sql語句,找出這些sql語句並不意味著完事了,些時我們常常用到explain這個命令來檢視乙個這些sql語句的執行計畫,檢視該sql語句有沒有使用上索引,有沒有做全表掃瞄,這都可以通過explain命令來檢視。所以我們深入了解mysql的基於開銷的優化器,還可以獲得很多可能被優化器考慮到的訪問策略的細節,以及當執行sql語句時哪種策略預計會被優化器採用。

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

explain + sql語句
包含的資訊:

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

②select_type:查詢的型別,主要用於區別普通查詢、聯合查詢、子查詢等的複雜查詢

select_type種類:

select_type各欄位代表的含義:

③table:顯示這一行的資料是關於哪張表的。

④type種類(重要):顯示查詢使用了何種型別,從最好到最差依次是:system>const>eq_ref>ref>range>index>all

⑤possible_keys:顯示可能應用在這張表中的索引,乙個或多個。查詢涉及的字段上若存在索引,則該索引將被列出,但不一定被查詢實際使用。

⑥key(重要):實際使用的索引。如果為null則沒有使用索引。(查詢中若使用了覆蓋索引,則索引和查詢的select欄位重疊,在extra中顯示using index)

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

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

⑨rows:根據表統計資訊及索引選用情況,大致估算出找到所需的記錄所需要讀取的行數。

⑩extra(重要):包含不適合在其他列中顯示但十分重要的額外資訊。

Mysql之效能優化

mysql 資料庫效能優化之索引優化 大家都知道索引對於資料訪問的效能有非常關鍵的作用,都知道索引可以提高資料訪問效率。為什麼索引能提高資料訪問效能?他會不會有 是不是索引建立越多,效能就越好?到底該如何設計索引,才能最大限度的發揮其效能?這篇文章主要是帶著上面這幾個問題來做乙個簡要的分析,同時排除...

Mysql之效能優化

資料庫表的設計一般要遵循資料庫設計的三正規化,即第一正規化,第二正規化,第三正規化。第一正規化 1nf 資料庫表中的任一欄位都是單一的,不可再分的。換句話來說,就是資料庫表必須是一張二維表。第二正規化 2nf 資料庫表中的任一非關鍵字對任意候選關鍵字不存在部分函式依賴。部分函式依賴是指 候選關鍵字中...

效能優化之mysql索引優化

sql及索引優化 如何通過慢查詢日誌發現有問題的sql?查詢次數多且每次查詢占用時間長的sql 通常為pt query digest分析的前幾個查詢 io大的sql 注意pt query digest分析中的rows examine項 未命中索引的sql 注意pt query digest分析中ro...