mysql之explain分析sql語句

2022-05-05 03:15:08 字數 1624 閱讀 8728

explain分析查詢

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

如下為實驗**:裡面有1萬條測試資料

explain欄位解析:

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

2、type:這是最重要的字段之一,顯示查詢使用了何種型別。

從最好到最差的連線型別為system、const、eq_reg、ref、range、index和all,一般來說,得保證查詢至少達到range級別,最好能達到ref。

type中包含的值:

system、const: 可以將查詢的變數轉為常量. 如id=1; id為 主鍵或唯一鍵.

eq_ref: 訪問索引,返回某單一行的資料.(通常在聯接時出現,查詢使用的索引為主鍵或惟一鍵)

ref: 訪問索引,返回某個值的資料.(可以返回多行) 通常使用=時發生

range: 這個連線型別使用索引返回乙個範圍中的行,比如使用》或《查詢東西,並且該字段上建有索引時發生的情況(注:不一定好於index)

index: 以索引的順序進行全表掃瞄,優點是不用排序,缺點是還要全表掃瞄

all: 全表掃瞄,應該盡量避免

3、possible_keys:顯示可能應用在這張表中的索引。如果為空,表示沒有可能應用的索引。

4、key:實際使用的索引。如果為null,則沒有使用索引。

mysql很少會選擇優化不足的索引,此時可以在select語句中使用force index(index_name)來強制使用乙個索引或者用ignore index(index_name)來強制忽略索引。

mysql強制使用和不使用索引:

5、key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好

6、ref:顯示索引的哪一列被使用了,如果可能的話,是乙個常數

7、rows:mysql認為必須檢索的用來返回請求資料的行數

8、extra:關於mysql如何解析查詢的額外資訊,主要有以下幾種

extra中包含的值:

using index: 只用到索引,可以避免訪問表,效能很高。

using where: 使用到where來過濾資料, 不是所有的where clause都要顯示using where. 如以=方式訪問索引。

using tmporary: 用到臨時表去處理當前的查詢。

using filesort: 用到額外的排序,此時mysql會根據聯接型別瀏覽所有符合條件的記錄,並儲存排序關鍵字和行指標,然後排序關鍵字並按順序檢索行。(當使用order by v1,而沒用到索引時,就會使用額外的排序)。

range checked for eache record(index map:n): 沒有好的索引可以使用。

using index for group-by:

表明可以在索引中找到分組所需的所有資料,不需要查詢實際的表。explain select user_id from t_order group by user_id;

見到using temporary和using filesort,就意味著mysql根本不能使用索引,結果是檢索會很慢,需要優化sql了。

MySQL 之 Explain 輸出分析

mysql 之 explain 輸出分析 前面的文章寫過 mysql 的事務和鎖,這篇文章我們來聊聊 mysql 的 explain,估計大家在工作或者面試中多多少少都會接觸過這個。可能工作中實際使用的不多,但是不論的自己學習還是面試,都需要掌握的。explain 可以使用在select,delet...

Mysql效能分析 Explain

一.explain是什麼 使用explain關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是 如何處理你的sql語句的。分析你的查詢語句或是表結構的效能瓶頸 二.explain作用 1 表的讀取順序 2 哪些索引可以使用 3 資料讀取操作的操作型別 4 哪些索引被實際使用 5 表之間的引...

mysql效能分析之explain的用法

之前是一直沒有聽過explain這個關鍵字的,最近因為專案中總是會有慢查詢的一些操作,所以請教了旁邊的同事幫忙排查下原因,看到同事用explain來分析一些sql語句,感覺好像發現了新大陸一樣。於是自己也來學習下並總結自己學到的一些知識,如有問題歡迎拍磚。首先來做個測試,我這裡有一張表 t jiak...