mysql執行計畫的生成方法和檢視

2021-10-07 05:13:19 字數 2606 閱讀 7681

1.生成執行計畫

生成的方法很簡單在相應的select語句前面加explain即可

2.檢視執行計畫

字段解釋

id包含一組數字,表示查詢中執行select子句或操作表的順序,執行順序從大到小執行,當id值一樣的時候,執行順序由上往下

select_type

表示查詢中每個select子句的型別(簡單or複雜)

type

表示mysql在表中找到所需行的方式,又稱「訪問型別」

possible_keys

指出mysql能使用哪個索引在表中找到行,查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢使用

key顯示mysql在查詢中實際使用的索引,若沒有使用索引,顯示為null。當查詢中若使用了覆蓋索引,則該索引僅出現在key列表中

key_len

表示索引中使用的位元組數,可通過該列計算查詢中使用的索引的長度

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

rows

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

extra

包含不適合在其他列中顯示但十分重要的額外資訊

select子句的型別

解釋******

查詢中不包含子查詢或者union

primary

查詢中若包含任何複雜的子部分,最外層查詢則被標記為primary

subquery

在select或where列表中包含了子查詢,該子查詢被標記為subquery

derived

在from列表中包含的子查詢被標記為derived(衍生),若第二個select出現在union之後,則被標記為union;若union包含在from子句的子查詢中,外層select將被標記為:derived從union表獲取結果的select被標記為:union result

type訪問型別

解釋all

full table scan, mysql將進行全表掃瞄

index

full index scan,index與all區別為index型別只遍歷索引樹

range

range index scan,對索引的掃瞄開始於某一點,返回匹配值域的行,常見於between、<、>等的查詢

ref非唯一性索引掃瞄,返回匹配摸個單獨值的所有行。常見於使用非唯一索引或唯一索引的非唯一字首進行的查詢

eq_ref

唯一性索引掃瞄,對於每個索引鍵,表中只有一條記錄與之匹配。常見於主鍵或唯一索引掃瞄

const、system

當mysql對查詢某部分進行優化,並轉換為乙個常量時,使用這些型別訪問。如將主鍵置於where列表中,mysql就能將該查詢轉換為乙個常量

null

mysql在優化過程中分解語句,執行時甚至不用訪問表或索引

extra額外資訊

解釋using where

表示mysql伺服器在儲存引擎受到記錄後進行「後過濾」(post-filter),如果查詢未能使用索引,using where的作用只是提醒我們mysql將用where子句來過濾結果集

using temporary

表示mysql需要使用臨時表來儲存結果集,常見於排序和分組查詢

using filesort

mysql中無法利用索引完成的排序操作稱為「檔案排序」

3.mysql執行計畫的侷限

explain不會告訴你關於觸發器、儲存過程的資訊或使用者自定義函式對查詢的影響情況

explain不考慮各種cache

explain不能顯示mysql在執行查詢時所作的優化工作

部分統計資訊是估算的,並非精確值

expalin只能解釋select操作,其他操作要重寫為select後檢視執行計畫

4.對於非select語句檢視執行計畫

在實際的工作中也經常需要檢視一些諸如update、delete的執行計畫,(mysql5.6的版本已經支援直接檢視)但是這時候並不能直接通過explain來進行檢視,而需要通過改寫語句進行檢視執行計畫

在乙個生產資料庫的慢查詢日誌發現有條語句如下:

count: 13 time=73.44s (954s) lock=0.00s (0s) rows=0.0 (0), ipos[ipos]@2hostsupdate ipos_zdjhd m,ipos_zdjhdtj tj set m.qr=n,m.qrrq=『s』,m.qrr=『s』,tj.qr=n,tj.qrrq='s』where m.ydjh=『s』 and tj.djbh=『s』

可以改寫如下:

explain select m.qr , m.qrr , tj.qr , tj.qrrq from ipos_zdjhd m,ipos_zdjhdtj tj where m.ydjh='17233' and tj.djbh='48632';
馬上可以發現ipos_zdjhd表進行了全表掃瞄,而ipos_zdjhd表有1076971行的資料,所以整個update的操作肯定是乙個很慢的過程,經過和開發人員溝通後,在ipos_zdjhd表增加相應的索引便讓整個過程提公升了500倍。執行計畫加上慢查詢日誌組成了mysql調優過程的一組調優利器,當資料庫穩定過後引數的調優是很少的一部分,80%以上的調優都會是sql調優

mysql 生成執行計畫 MySQL執行計畫

和很多其他關係型資料庫不通,mysql並不會在生成查詢位元組碼來執行查詢。mysql生成查詢的一棵指令樹,然後通過儲存引擎執行完成這棵指令樹並返回結果。最終的執行計畫包含了重構查詢的全部資訊。如果某個查詢執行explain extended 之後,在執行show warnings,就可以看到重構出的...

mysql 生成執行計畫 MySQL的執行計畫

mysql的執行計畫 什麼是執行計畫?執行計畫通常是開發者優化sql語句的第一步。mysql在解析sql語句時,會生成多套執行方案,然後內部會進行乙個成本的計算,然後通過優化器選擇乙個最優的方案執行,然後根據這個方案會生成乙個執行計畫。開發者通過檢視sql語句的執行計畫,可以直觀的了解到mysql是...

coredump的生成方法和使用

1,如何開啟生成coredump檔案 echo ulimit c 1024 etc profile 限制生成core檔案的大小為1024kb 或直接在控制台輸入ulimit c 不限制core檔案的大小 取消限制 ulimit c unlimited 2,檢視是否開啟 ulimit a 檢視 3,修...