MySQL Explain檢視執行計畫

2022-05-29 04:36:13 字數 3382 閱讀 7330

這篇部落格寫的還是蠻全的

在執行sql的時候,經常有些sql未正確使用到索引,導致程式變慢,通過使用explain進行分析sql,可以清楚表的讀取順序、索引的使用情況等,從而優化索引。

explain select

*from student

expain出來的資訊有10列,分別是id、select_type、table、type、possible_keys、key、key_len、ref、rows、extra,下面對這些字段出現的可能進行解釋

輸出結果集的表(表別名)

表示mysql在表中找到所需行的方式,又稱「訪問型別」。常用的型別有: all, index, range, ref, eq_ref, const, system, null

從上到下,效能由差到最好:

1. type=all,全表掃瞄,mysql遍歷全表來找到匹配行

一般是沒有where條件或者where條件沒有使用索引的查詢語句

2. type=index,索引全掃瞄,mysql遍歷整個索引來查詢匹配行,並不會掃瞄表

一般是查詢的字段都有索引的查詢語句

3.type=range,索引範圍掃瞄,常用於、>=、between等操作

explain select

*from student where sno>

3001

and sno <

3004

注意這種情況下比較的字段是需要加索引的,如果沒有索引,則mysql會進行全表掃瞄

4.type=ref,使用非唯一索引或唯一索引的字首掃瞄,返回匹配某個單獨值的記錄行

sno字段存在普通索引(非唯一索引)

ref型別還經常會出現在join操作中:

studentsc成績表關聯查詢,關聯字段student.sno(唯一索引),sc.sno(非唯一索引)。表關聯查詢時必定會有一張表進行全表掃瞄,此表一定是幾張表中記錄行數最少的表,然後再通過非唯一索引尋找其他關聯表中的匹配行,以此達到表關聯時掃瞄行數最少。

因為studentsc兩表中student表的記錄行數最少,所以student表進行全表掃瞄,sc表通過非唯一索引尋找匹配行。

5.type=eq_ref,類似ref,區別在於使用的索引是唯一索引,對於每個索引鍵值,表中只有一條記錄匹配

eq_ref一般出現在多表連線時使用primary key或者unique index作為關聯條件。

6.type=const/system,單錶中最多有一條匹配行,查詢起來非常迅速,所以這個匹配行的其他列的值可以被優化器在當前查詢中當作常量來處理

const/system出現在根據主鍵primary key或者 唯一索引 unique index 進行的查詢

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

表示查詢可能使用的索引,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用

實際使用的索引

使用索引欄位的長度

表示上述表的連線匹配條件,即哪些列或常量被用於查詢索引列上的值

表示mysql根據表統計資訊及索引選用情況,估算的找到所需的記錄所需要讀取的行數

該列包含mysql解決查詢的詳細資訊,有以下幾種情況:

using index:表示索引覆蓋,不會回表查詢

using where:使用where過濾條件,進行了回表查詢

using temporary:mysql使用了臨時表來儲存結果集,常見於排序和分組查詢

using filesort:排序時無法使用到索引時,就會出現這個。常見於order by和group by語句中

using join buffer:在獲取連線條件時沒有使用索引,並且需要連線緩衝區來儲存中間結果。如果出現了這個值,那應該注意,根據查詢的具體情況可能需要新增索引來改進能。

mysql explain檢視sql語句的執行計畫

1 概述 執行計畫的檢視是進行資料庫的sql語句調優時的乙個重要依據,mysql的執行計畫檢視相對oracle簡便很多,功能也相對簡單很多。2.mysql執行計畫的生成方法和檢視 2.1 執行計畫的生成方法 explain select 生成的方法很簡單在相應的select前面加explain即可 ...

檢視linux運存 Linux 檢視負載記憶體

1.作用 top命令用來顯示執行中的程式程序,使用許可權是所有使用者。2.格式 top d delay q c s s i n 3.主要引數 d 指定更新的間隔,以秒計算。q 沒有任何延遲的更新。如果使用者有超級使用者,則top命令將會以最高的優先序執行。c 顯示程序完整的路徑與名稱。s 累積模式,...

mysql explain欄位說明

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