SQL執行計畫explain

2021-09-26 09:29:24 字數 1351 閱讀 2772

執行計畫,簡單的來說,是sql在資料庫中執行時的表現情況,通常用於sql效能分析,優化等場景。在mysql使用explain關鍵字來檢視sql的執行計畫。如下所示:

關鍵字:explain

//1. 查詢t_base_user

select * from t_base_user where name="andyqian";

//2. 檢視上述語句的執行計畫

explain select * from t_base_user where name="andyqian";

通過上面,我們知道了什麼是執行計畫,也看到了執行計畫到底是什麼東西,現在我們來具體了解一下,mysql執行計畫中,每個屬性代表的是什麼意思?

我們一一來介紹,並說明每個屬性有哪些可選值,以及每個可選值的意思。

表示查詢中select操作表的順序,按順序從大到依次執行

該表示選擇的型別,可選值有: ******(簡單的),

該屬性表示訪問型別,有很多種訪問型別。

最常見的其中包括以下幾種: all(全表掃瞄), index(索引掃瞄),range(範圍掃瞄),ref (非唯一索引掃瞄),eq_ref(唯一索引掃瞄,),(const)常數引用, 訪問速度依次由慢到快。其中 : range(範圍)常見與 between and …, 大於 and 小於這種情況。

提示 : 慢sql是否走索引,走了什麼索引,也就可以通過該屬性檢視了。

表示該語句查詢的表

顧名思義,該屬性給出了,該查詢語句,可能走的索引,(如某些欄位上索引的名字)這裡提供的只是參考,而不是實際走的索引,也就導致會有possible_keys不為null,key為空的現象。

顯示mysql實際使用的索引,其中就包括主鍵索引(primary),或者自建索引的名字。

key_len :

表示索引所使用的位元組數,

連線匹配條件,如果走主鍵索引的話,該值為: const, 全表掃瞄的話,為null值

掃瞄行數,也就是說,需要掃瞄多少行,採能獲取目標行數,一般情況下會大於返回行數。通常情況下,rows越小,效率越高, 也就有大部分sql優化,都是在減少這個值的大小。注意:  理想情況下掃瞄的行數與實際返回行數理論上是一致的,但這種情況及其少,如關聯查詢,掃瞄的行數就會比返回行數大大增加)

這個屬性非常重要,該屬性中包括執行sql時的真實情況資訊,如上面所屬,使用到的是」using where」,表示使用where篩選得到的值,常用的有:「using temporary」: 使用臨時表 「using filesort」: 使用檔案排序

EXPLAIN檢視SQL執行計畫

參考 mysql王者晉級之路 如有錯誤的地方,請大家一定不吝指出,不勝感激。還有,不夠全面,以後隨著理解的深入我會不斷加內容的。我們寫完乙個sql語句,為了讓它高效能地執行,一定要explain一下,檢視一下它的執行計畫。檢視心法 1.首先從查詢型別type列開始檢視,如果出現all關鍵字,那麼不用...

EXPLAIN命令檢視SQL執行計畫

列名 說明id select識別符,這是select的查詢序列號。select type select型別,可以為以下任何一種 table 輸出的行所引用的表 partitions 如果查詢是基於分割槽表的話,顯示查詢將訪問的分割槽。type 聯接型別。下面給出各種聯接型別,按照從最佳型別到最壞型別...

SQL優化 02 執行計畫 EXPLAIN

explain語句可以獲得關於mysql如何執行select語句的資訊,借助於explain,可以知道什麼時候必須為表加入索引以得到乙個使用索引來尋找記錄的更快的select。explain extended select select options示例用到的原始表如下 表中的索引如下圖所示 執行...