Mysql執行計畫

2021-09-01 19:06:16 字數 2633 閱讀 3933

1、mysql執行計畫呼叫方式

explain select ……

2、執行計畫包含的資訊

| id | select_type| table | type| possible_keys | key | key_len | ref | rows| filtered | extra |

2.1、id

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

id相同,執行順序由上至下

如果是子查詢,id的序號會遞增,id值越大優先順序越高,越先被執行

id如果相同,可以認為是一組,從上往下順序執行;在所有組中,id值越大,優先順序越高,越先執行

2.2、select_type

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

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

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

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

derived:在from列表中包含的子查詢被標記為derived(衍生)

union:若第二個select出現在union之後,則被標記為union;若union包含在from子句的子查詢中,外層select將被標記為derived

union result:從union表獲取結果的select被標記為union result

2.3、type

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

| all | index | range | ref | eq_ref | const,system | null |

由左至右,由最差到最好

2.3.1)all:full table scan, mysql將遍歷全表以找到匹配的行

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

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

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

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

2.3.6)const、system:當mysql對查詢某部分進行優化,並轉換為乙個常量時,使用這些型別訪問;如將主鍵置於where列表中,mysql就能將該查詢轉換為乙個常量,system是const型別的特例,當查詢的表只有一行的情況下,使用system

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

2.4、possible_keys

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

2.5、 key

顯示mysql在查詢中實際使用的索引,若沒有使用索引,顯示為null

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

2.6、key_len

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

note:key_len顯示的值為索引欄位的最大可能長度,並非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的

2.7、ref

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

2.8、rows

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

2.9、extra

2.9.1)using index

該值表示相應的select操作中使用了覆蓋索引(covering index)

覆蓋索引(covering index):mysql可以利用索引返回select列表中的字段,而不必根據索引再次讀取資料檔案

2.9.2)using where

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

2.9.3)using temporary

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

2.9.4)using filesort

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

3、mysql執行計畫的侷限

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

3.2)explain不考慮各種cache

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

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

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

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表好呢,還是利用索引...