為了知道優化sql語句的執行,需要檢視sql語句的具體執行過程,以加快sql的執行。
檢視執行計畫只需要在sql語句前新增explain
column
meaning
id序列號,表示查詢中執行select子句或者操作表的順序
select_type
型別是普通查詢、聯合查詢、子查詢
table
正在查詢訪問的表、別名、結果集
partitions
分割槽type
訪問型別,如何去訪問資料
possible_keys
可能用到的索引,但不一定會被使用
key一定會使用的索引
key_len
使用的索引的位元組數
ref索引使用的列,最好用常量值
rows
大致估算需要讀取的行數
filtered
percentage of rows filtered by table condition
extra
額外資訊
id相同,從上往下執行
id不同,如果是子查詢、union,id號會遞增,越大越優先執行。
不同和相同有存在,相同的一組從上往下執行,不同大號先執行
sample,簡單查詢,不包含子查詢,沒有union
primary,最外層的查詢
subquery,在select或where中有子查詢
dependent subquery,受外部影響的子查詢,查到的是結果集合
derived,在from後跟著子查詢,衍生表
union,求全集,在union之後的查詢
dependent union,依賴於外部查詢的union
union result,union後獲取的結果
uncacheable subquery,子查詢的結果不能被快取
uncacheable union,表示union的查詢結果不能被快取
具體表名,表別名
,union結果集合
,衍生表
null
效率從低到高。一般至少到range級別。
all,全表掃瞄。
index,全索引掃瞄。覆蓋索引,或者使用索引進行排序。
range,利用索引進行範圍查詢。
index_subquery,利用索引來關聯子查詢,普通索引
unique_subquery,與上乙個相似,但使用的是唯一索引
index_merge,索引組合使用
ref_ro_null,某個字段需要null值時。
ref,使用普通索引查詢
eq_ref,使用唯一索引查詢
const,這個表只有一行資料能匹配到
system,表裡只有一行資料,等於系統表
using filesort,無法利用索引進行排序,只能利用排序演算法進行排序,會消耗額外的位置。
using temporary,用臨時表儲存中間結果。
using index,覆蓋索引。
using where,使用where進行條件過濾
using join buffer,連線快取
impossible where,不可能的where,結果總是false
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表好呢,還是利用索引...