婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Mysql深入探索之Explain執行計劃詳析

Mysql深入探索之Explain執行計劃詳析

熱門標簽:宜賓全自動外呼系統廠家 申請400電話電話價格 新鄉智能外呼系統好處 臨沂做地圖標注 地圖標注客戶付款 石家莊400電話辦理公司 廣東400企業電話申請流程 咸陽防封電銷卡 許昌外呼增值業務線路

前言

如何寫出效率高的SQL語句,提到這必然離不開Explain執行計劃的分析,至于什么是執行計劃,如何寫出高效率的SQL,本篇文章將會一一介紹。

執行計劃

執行計劃是數據庫根據 SQL 語句和相關表的統計信息作出的一個查詢方案,這個方案是由查詢優化器自動分析產生的。

使用explain關鍵字可以模擬優化器執行 SQL 查詢語句,從而知道 MySQL 是如何處理你的 SQL 語句的,分析你的 select 語句或是表結構的性能瓶頸,讓我們知道 select 效率低下的原因,從而改進我們的查詢。

explain 的結果如下:

下面是有關各列的詳細介紹,重要的有id、type、key、rows、extra。

id

  • id 列的編號就是 select 的序列號,也可以理解為 SQL 執行順序的標識,有幾個 select 就有幾個 id。
    • id 值不同:如果是只查詢,id 的序號會遞增,id 值越大優先級越高,越先被執行;
    • id 值相同:從上往下依次執行;
    • id 列為 null:表示這是一個結果集,不需要使用它來進行查詢。

select_type

查詢的類型,主要用于區分普通查詢、聯合查詢、子查詢等復雜的查詢;

simple:表示查詢中不包括 union 操作或者子查詢,位于最外層的查詢的 select_type 即為 simple,且只有一個;

 explain select * from t3 where id=3952602;

primary:需要 union 操作或者含有子查詢的 select,位于最外層的查詢的 select_type 即為 primary,且只有一個;

explain select * from (select * from t3 where id=3952602) a ;

derived:from 列表中出現的子查詢,也叫做衍生表;mysql 或者遞歸執行這些子查詢,把結果放在臨時表里。

 explain select * from (select * from t3 where id=3952602) a ;

subquery:除了 from 子句中包含的子查詢外,其他地方出現的子查詢都可能是 subquery。

explain select * from t3 where id = (select id from t3 whereid=3952602 ) ;

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

explain select * from t3 where id=3952602 union all select * from t3;

union result:從 union 表獲取結果的 select ,因為它不需要參與查詢,所以 id 字段為 null。

 explain select * from t3 where id=3952602 union all select * from t3;

dependent union:與 union 一樣,出現在 union 或 union all 語句中,但是這個查詢要受到外部查詢的影響;

dependent subquery:與 dependent union 類似,子查詢中的第一個 SELECT,這個 subquery 的查詢要受到外部表查詢的影響。

table

表示 explain 的一行正在訪問哪個表。

  • 如果查詢使用了別名,那么這里顯示的是別名;
  • 如果不涉及對數據表的操作,那么這顯示為 null;
  • 如果顯示為尖括號括起來的就表示這個是臨時表,后邊的 N 就是執行計劃中的 id,表示結果來自于這個查詢產生;
  • 如果是尖括號括起來的union M,N>,與類似,也是一個臨時表,表示這個結果來自于 union 查詢的 id 為 M,N 的結果集。

type

訪問類型,即 MySQL 決定如何查找表中的行。

依次從好到差:system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL,除了 all 之外,其他的 type 都可以使用到索引,除了 index_merge 之外,其他的 type 只可以用到一個索引。一般來說,得保證查詢至少達到 range 級別,最好能達到 ref。

  1. system:表中只有一行數據(等于系統表),這是 const 類型的特例,平時不會出現,可以忽略不計。
  2. const:使用唯一索引或者主鍵,表示通過索引一次就找到了,const 用于比較 primary key 或者 unique 索引。因為只需匹配一行數據,所有很快。如果將主鍵置于 where 列表中,mysql 就能將該查詢轉換為一個 const。
  3. eq_ref:唯一性索引掃描,對于每個索引鍵,表中只有一行數據與之匹配。常見于主鍵或唯一索引掃描。
  4. ref:非唯一性索引掃描,返回匹配某個單獨值的所有行。本質也是一種索引。
  5. fulltext:全文索引檢索,全文索引的優先級很高,若全文索引和普通索引同時存在時,mysql 不管代價,優先選擇使用全文索引。
  6. ref_or_null:與 ref 方法類似,只是增加了 null 值的比較。
  7. index_merge:表示查詢使用了兩個以上的索引,索引合并的優化方法,最后取交集或者并集,常見 and ,or 的條件使用了不同的索引。
  8. unique_subquery:用于 where 中的 in 形式子查詢,子查詢返回不重復值唯一值;
  9. index_subquery:用于 in 形式子查詢使用到了輔助索引或者 in 常數列表,子查詢可能返回重復值,可以使用索引將子查詢去重。
  10. range:索引范圍掃描,常見于使用>,,between ,in ,like等運算符的查詢中。
  11. index:索引全表掃描,把索引樹從頭到尾掃一遍;
  12. all:遍歷全表以找到匹配的行(Index 與 ALL 雖然都是讀全表,但 index 是從索引中讀取,而 ALL 是從硬盤讀取)
  13. NULL: MySQL 在優化過程中分解語句,執行時甚至不用訪問表或索引。

possible_keys

顯示查詢可能使用到的索引。

key

顯示查詢實際使用哪個索引來優化對該表的訪問;

select_type 為 index_merge 時,這里可能出現兩個以上的索引,其他的 select_type 這里只會出現一個。

key_len

  • 用于處理查詢的索引長度,表示索引中使用的字節數。通過這個值,可以得出一個多列索引里實際使用了哪一部分。
  • 注:key_len 顯示的值為索引字段的最大可能長度,并非實際使用長度,即 key_len 是根據表定義計算而得,不是通過表內檢索出的。另外,key_len 只計算 where 條件用到的索引長度,而排序和分組就算用到了索引,也不會計算到 key_len 中。

ref

顯示哪個字段或者常數與 key 一起被使用。

  • 如果是使用的常數等值查詢,這里會顯示 const。
  • 如果是連接查詢,被驅動表的執行計劃這里會顯示驅動表的關聯字段。
  • 如果是條件使用了表達式或者函數,或者條件列發生了內部隱式轉換,這里可能顯示為 func。

rows

表示 MySQL 根據表統計信息及索引選用情況,大致估算的找到所需的目標記錄所需要讀取的行數,不是精確值。

extra

不適合在其他列中顯示但十分重要的額外信息。

這個列可以顯示的信息非常多,有幾十種,常用的有:

類型 說明
Using filesort MySQL 有兩種方式可以生成有序的結果,通過排序操作或者使用索引,當 Extra 中出現了 Using filesort 說明 MySQL 使用了后者,但注意雖然叫 filesort 但并不是說明就是用了文件來進行排序,只要可能排序都是在內存里完成的。大部分情況下利用索引排序更快,所以一般這時也要考慮優化查詢了。使用文件完成排序操作,這是可能是 ordery by,group by 語句的結果,這可能是一個 CPU 密集型的過程,可以通過選擇合適的索引來改進性能,用索引來為查詢結果排序。
Using temporary 用臨時表保存中間結果,常用于 GROUP BY 和 ORDER BY 操作中,一般看到它說明查詢需要優化了,就算避免不了臨時表的使用也要盡量避免硬盤臨時表的使用。
Not exists MYSQL 優化了 LEFT JOIN,一旦它找到了匹配 LEFT JOIN 標準的行, 就不再搜索了。
Using index 說明查詢是覆蓋了索引的,不需要讀取數據文件,從索引樹(索引文件)中即可獲得信息。如果同時出現 using where,表明索引被用來執行索引鍵值的查找,沒有 using where,表明索引用來讀取數據而非執行查找動作。這是 MySQL 服務層完成的,但無需再回表查詢記錄。
Using index condition 這是 MySQL 5.6 出來的新特性,叫做“索引條件推送”。簡單說一點就是 MySQL 原來在索引上是不能執行如 like 這樣的操作的,但是現在可以了,這樣減少了不必要的 IO 操作,但是只能用在二級索引上。
Using where 使用了 WHERE 從句來限制哪些行將與下一張表匹配或者是返回給用戶。注意:Extra 列出現 Using where 表示 MySQL 服務器將存儲引擎返回服務層以后再應用 WHERE 條件過濾。
Using join buffer 使用了連接緩存:Block Nested Loop,連接算法是塊嵌套循環連接;Batched Key Access,連接算法是批量索引連接
impossible where where 子句的值總是 false,不能用來獲取任何元組
select tables optimized away 在沒有 GROUP BY 子句的情況下,基于索引優化 MIN/MAX 操作,或者對于 MyISAM 存儲引擎優化 COUNT(*)操作,不必等到執行階段再進行計算,查詢執行計劃生成的階段即完成優化。
distinct 優化 distinct 操作,在找到第一匹配的元組后即停止找同樣值的動作

filtered

  • 使用 explain extended 時會出現這個列,5.7 之后的版本默認就有這個字段,不需要使用 explain extended 了。
  • 這個字段表示存儲引擎返回的數據在 server 層過濾后,剩下多少滿足查詢的記錄數量的比例,注意是百分比,不是具體記錄數。

關于 MySQL 執行計劃的局限性

  1. EXPLAIN 不會告訴你關于觸發器、存儲過程的信息或用戶自定義函數對查詢的影響情況;
  2. EXPLAIN 不考慮各種 Cache;
  3. EXPLAIN 不能顯示 MySQL 在執行查詢時所作的優化工作;
  4. 部分統計信息是估算的,并非精確值;
  5. EXPALIN 只能解釋 SELECT 操作,其他操作要重寫為 SELECT 后查看。

查詢計劃案例分析

執行順序

  1. (id = 4):【select id, name from t2】:select_type 為 union,說明 id=4 的 select 是 union 里面的第二個 select。
  2. (id = 3):【select id, name from t1 where address = ‘11'】:因為是在 from 語句中包含的子查詢所以被標記為 DERIVED(衍生),where address = ‘11' 通過復合索引 idx_name_email_address 就能檢索到,所以 type 為 index。
  3. (id = 2):【select id from t3】:因為是在 select 中包含的子查詢所以被標記為 SUBQUERY。
  4. (id = 1):【select d1.name, … d2 from … d1】:select_type 為 PRIMARY 表示該查詢為最外層查詢,table 列被標記為 “derived3”表示查詢結果來自于一個衍生表(id = 3 的 select 結果)。
  5. (id = NULL):【 … union … 】:代表從 union 的臨時表中讀取行的階段,table 列的 “union 1, 4”表示用 id=1 和 id=4 的 select 結果進行 union 操作。

總結

到此這篇關于Mysql深入探索之Explain執行計劃的文章就介紹到這了,更多相關Mysql Explain執行計劃內容請搜索腳本之家以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • 詳解 MySQL 執行計劃
  • MySQL執行計劃的深入分析
  • mysql執行計劃id為空(UNION關鍵字)詳解
  • MySQL中通過EXPLAIN如何分析SQL的執行計劃詳解
  • MySQL中執行計劃explain命令示例詳解
  • MySql中如何使用 explain 查詢 SQL 的執行計劃
  • mysql執行計劃介紹
  • MYSQL explain 執行計劃
  • 帶你學習MySQL執行計劃

標簽:臺灣 日照 貴州 鷹潭 鎮江 阜新 合肥 北京

巨人網絡通訊聲明:本文標題《Mysql深入探索之Explain執行計劃詳析》,本文關鍵詞  Mysql,深入,探索,之,Explain,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Mysql深入探索之Explain執行計劃詳析》相關的同類信息!
  • 本頁收集關于Mysql深入探索之Explain執行計劃詳析的相關信息資訊供網民參考!
  • 推薦文章
    婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av
    日韩欧美的一区二区| 国产馆精品极品| 亚洲欧美成aⅴ人在线观看| 中文字幕一区二区三区av| 亚洲少妇中出一区| 天天色综合成人网| 国产成人在线视频免费播放| 99视频精品在线| 欧美精品高清视频| 国产日韩av一区二区| 亚洲一区二区三区四区在线观看 | 秋霞电影网一区二区| 精品伊人久久久久7777人| youjizz久久| 欧美裸体一区二区三区| 国产精品青草久久| 日韩精品欧美精品| 色综合天天综合网天天狠天天| 日韩精品中文字幕一区| 亚洲精品成人a在线观看| 久久99精品国产麻豆婷婷| 色偷偷成人一区二区三区91 | 日韩一卡二卡三卡四卡| 中文字幕一区二区三区视频| 青青青爽久久午夜综合久久午夜| 成人在线一区二区三区| 在线观看91精品国产麻豆| 国产精品理论片| 免费观看在线综合| 成人精品小蝌蚪| 日韩精品中文字幕一区二区三区 | 欧美手机在线视频| 国产亚洲精品资源在线26u| 天堂午夜影视日韩欧美一区二区| 成人av午夜电影| 久久蜜桃av一区精品变态类天堂| 无吗不卡中文字幕| 99国产精品久| 国产人成一区二区三区影院| 久久国产乱子精品免费女| 欧美人xxxx| 亚洲精品亚洲人成人网在线播放| 久久 天天综合| 欧美一区二区三区视频在线| 亚洲线精品一区二区三区| 91日韩精品一区| 18涩涩午夜精品.www| 成人免费毛片片v| 正在播放亚洲一区| 国产99久久久精品| 精品日韩欧美一区二区| 免费观看日韩av| 6080午夜不卡| 日韩影视精彩在线| 欧美二区三区的天堂| 天天综合天天综合色| 欧美美女一区二区在线观看| 亚洲图片欧美一区| 欧美日韩免费观看一区二区三区| 亚洲狼人国产精品| 色综合久久66| 尤物视频一区二区| 欧美视频精品在线观看| 午夜精品福利在线| 91精选在线观看| 老司机免费视频一区二区| 日韩精品一区二区在线观看| 精品一区二区三区在线播放 | 午夜精品福利一区二区三区av| 欧美日韩欧美一区二区| 日本人妖一区二区| 欧美一级专区免费大片| 久久99国产精品成人| 国产女人aaa级久久久级 | 91原创在线视频| 亚洲一区在线观看视频| 欧美高清www午色夜在线视频| 手机精品视频在线观看| 欧美tk—视频vk| 成人免费观看男女羞羞视频| 一区二区三区精品视频| 欧美一级久久久久久久大片| 国产精品99久久久久久似苏梦涵| 国产亚洲精久久久久久| 91免费在线视频观看| 性做久久久久久免费观看欧美| 91精品国产综合久久精品| 国产丶欧美丶日本不卡视频| 一区二区三区在线播| 日韩欧美aaaaaa| 不卡视频免费播放| 性久久久久久久久久久久| 精品国产99国产精品| 色综合天天在线| 精品在线免费视频| 亚洲最色的网站| 久久久久久久久久久99999| 色一情一伦一子一伦一区| 久久国产乱子精品免费女| 亚洲人成人一区二区在线观看| 欧美人xxxx| 成+人+亚洲+综合天堂| 日产国产高清一区二区三区| 中文字幕的久久| 日韩一区二区在线看| 日韩欧美亚洲国产另类| 日本精品裸体写真集在线观看| 麻豆91在线观看| 亚洲精品国产高清久久伦理二区| 欧美一级久久久久久久大片| 国产成a人亚洲精品| 视频一区在线视频| 国产精品久久99| 欧美日韩精品电影| jiyouzz国产精品久久| 韩国精品主播一区二区在线观看| 亚洲成人av一区二区| 亚洲乱码精品一二三四区日韩在线| 日韩美女一区二区三区| 欧美日韩国产首页在线观看| 成人app在线观看| 国模无码大尺度一区二区三区| 亚洲一级不卡视频| 亚洲天堂中文字幕| 亚洲国产高清在线| 欧美成人官网二区| 欧美老人xxxx18| 成人高清在线视频| 国产精品18久久久| 国产精品小仙女| 国产在线精品一区二区| 美女脱光内衣内裤视频久久网站| 国产精品免费久久| 精品理论电影在线观看| 777久久久精品| 欧美日韩精品欧美日韩精品一综合| 亚洲一区二区欧美激情| 亚洲美女视频在线观看| 国产精品免费aⅴ片在线观看| 国产午夜精品一区二区三区嫩草| 欧美mv日韩mv| 成人午夜激情在线| 国产精品69久久久久水密桃| 美女高潮久久久| 久久精品国产精品青草| 蜜臀av一区二区在线观看| 蜜芽一区二区三区| 视频一区视频二区中文| 日本三级亚洲精品| 久久精品噜噜噜成人88aⅴ| 偷拍亚洲欧洲综合| 三级久久三级久久| 日精品一区二区三区| 午夜精品福利视频网站| 亚洲一级二级三级| 午夜激情一区二区三区| 热久久一区二区| 国内成人精品2018免费看| 国产成人小视频| 一本一道波多野结衣一区二区| 成人性生交大片| 国产aⅴ综合色| 在线免费观看日韩欧美| 欧美日韩一二三区| 欧美精品一二三区| 91精品国产品国语在线不卡| 精品999在线播放| 精品国产精品一区二区夜夜嗨| 日韩三级免费观看| 日韩区在线观看| 欧美国产视频在线| 欧美高清在线一区二区| 亚洲国产欧美另类丝袜| 亚洲一区自拍偷拍| 国产一区二区久久| 91色porny在线视频| 在线亚洲高清视频| ...av二区三区久久精品| 国产精品2024| 99视频在线观看一区三区| 在线免费亚洲电影| 日韩亚洲欧美成人一区| 精品国内片67194| 日韩一区中文字幕| 中文字幕一区二区三区在线播放| 亚洲一区二区三区在线看| 黑人精品欧美一区二区蜜桃 | 成人激情校园春色| 欧美中文字幕一区二区三区| 欧美巨大另类极品videosbest| 久久综合网色—综合色88| 国产精品色婷婷| 亚洲成人一二三| 激情亚洲综合在线| 91在线精品秘密一区二区| 在线91免费看| 国产清纯美女被跳蛋高潮一区二区久久w | 欧美色图天堂网| 中文字幕高清一区| 美女国产一区二区三区|