mysql 執行計畫explain理解

2021-10-02 03:02:34 字數 1653 閱讀 6488

id,

select_type,

key,

rows,

extra

select查詢的序列號,包含一組數字,表示查詢中執行select子句或操作表的順序,

id的序號會遞增,id值越大優先順序越高,越先被執行

查詢的型別,主要是用於區分普通查詢、聯合查詢、子查詢等複雜的查詢

******

簡單的select查詢,查詢中不包含子查詢或者union

primary

subquery

derived

union

union result

訪問型別,sql查詢優化中乙個很重要的指標,結果值從好到壞依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all

一般來說,好的sql查詢至少達到range級別,最好能達到ref

查詢涉及到的字段上存在索引,則該索引將被列出,但不一定被查詢實際使用

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

查詢中如果使用了覆蓋索引,則該索引僅出現在key列表中

表示索引中使用的位元組數,查詢中使用的索引的長度(最大可能長度),並非實際使用長度,理論上長度越短越好。key_len是根據表定義計算而得的,不是通過表內檢索出的

顯示索引的那一列被使用了,如果可能,是乙個常量const。

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

不適合在其他欄位中顯示,但是十分重要的額外資訊

using filesort

using temporary使用臨時表儲存中間結果,也就是說mysql在對查詢結果排序時使用了臨時表,常見於order by 和 group by

using index

using where

使用了where過濾

using join buffer

使用了鏈結快取

impossible where

select tables optimized away

在沒有group by子句的情況下,基於索引優化min/max操作或者對於myisam儲存引擎優化count(*)操作,不必等到執行階段在進行計算,查詢執行計畫生成的階段即可完成優化

distinct

優化distinct操作,在找到第乙個匹配的元祖後即停止找同樣值得動作

覆蓋索引(covering index):也叫索引覆蓋。就是select列表中的字段,只用從索引中就能獲取,不必根據索引再次讀取資料檔案,換句話說查詢列要被所建的索引覆蓋。 

注意:

a、如需使用覆蓋索引,select列表中的字段只取出需要的列,不要使用select *

b、如果將所有欄位都建索引會導致索引檔案過大,反而降低crud效能

mysql執行計畫 MySQL 執行計畫

1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....

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

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

mysql 查詢執行計畫 MySql執行計畫的檢視

一。什麼是資料庫執行計畫 利用乙個sql語句,你可能要server取出所有news表中的資訊.當server收到的這條sql的時候,第一件事情並不是解析它.如果這條sql沒有語法錯誤,server才會繼續工作.server會決定最好的計算方式.server會選擇,是讀整個news表好呢,還是利用索引...