mysql EXPLAIN 分析sql語句

2021-08-24 20:42:47 字數 1690 閱讀 1866

定位到問題sql ,耗時5s多

1.通過explain 分析低效sql的執行計畫

返回字段說明:select_type:表示select 的型別,常見的取值有 ******(簡單表,即不使用表連線或者子查詢)、primary(主查詢,即完成的查詢)、union(union中第二個或者後面的查詢語句)、subquery(子查詢中的第乙個select)等。

table:輸出結果集表。

type:表示mysql在表中找到所需行的方式,或者叫訪問型別,常見的型別有

allindex

range

refeq_ref

const,system

null

從左至右 效能有最差到最好。

(1)type=all,全表掃瞄,mysql遍歷全表來找到匹配的行。

(2)type=index,索引全掃瞄,mysql遍歷整個索引,來查詢匹配的行

(3)type=range,索引範圍掃瞄,常見於》 、>=、

(4)type=ref、使用非唯一索引掃瞄,或者唯一索引的字首掃瞄,返回匹配有個單獨值的記錄行。

(5)type=eq_ref,類似ref,區別就在於使用的索引是唯一索引,對於每個索引鍵,表中只有一條記錄匹配;簡單說,就是多表連線中使用primary key 或者 unique index 作為關聯條件。

(6)type=const/system, 單錶中最多有乙個匹配行,查詢起來非常迅速,所以這個匹配行中的其他列的值可以被優化器在當前查詢中當做常量來處理。例如,根據primary key 或者唯一索引 unique index 進行查詢。

(7)type=null,mysql 不用訪問表或者索引,直接就能得到結果。

(8)型別type還有其他值,如ref_or_null(與ref型別,區別在於條件包含對null的查詢),index_merge(索引合併優化),unique_subquery(in的後邊是乙個查詢主鍵欄位的子查詢)、index_subquery(與unique_subqueryl類似,區別在於 in的後邊是乙個查詢非唯一索引欄位的子查詢)。

possible_key: 表示查詢時可能使用的索引。

key:表示實際使用的索引

rows:掃瞄行的數量

extra:執**況的說明和描述。表示不適合在其他類中顯示,但是對執行計畫非常重要的額外資訊。

本例分析:

t_a_p的type使用的全表掃瞄, 在borrow_id建立索引。

再次檢視執行計畫,原來全表掃瞄 變成了 ref。掃瞄行數變成了1行。

mysql explain 用法分析

explain select id 選擇識別符號 select type 表示查詢的型別。table 輸出結果集的表 partitions 匹配的分割槽 type 表示表的連線型別 possible keys 表示查詢時,可能使用的索引 key 表示實際使用的索引 key len 索引欄位的長度 r...

MySQL explain索引查詢分析

最近學了mysql的索引原理,針對常見的幾個面試問題進行了實驗分析 新建乙個表 create table ifnot exists test www intunsigned auto increment intnot null yyy intnot null zzz intnot null prim...

mysql explain欄位說明

explain列的解釋 id 查詢的序列號 select type select查詢的型別,主要是區別普通查詢和聯合查詢 子查詢之類的複雜查詢。table 所訪問的資料庫中表的名稱。type 這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const eq reg ref range ...