explain

          功能
          我們?cè)谌粘J褂弥?,使用慢查詢找到?zhí)行時(shí)間比較久的查詢,然后使用SHOW STATUS、SHOW PROFILE、和explain做單條語(yǔ)句的分析。
          使用explain關(guān)鍵字可以模擬優(yōu)化器執(zhí)行sql查詢語(yǔ)句,從而知道Mysql是如何處理你的sql語(yǔ)句的。分析你的查詢語(yǔ)句或者表結(jié)構(gòu)的性能瓶頸。


          具體可以分析哪些

          * 表的讀取順序
          * 數(shù)據(jù)讀取操作的操作類型
          * 哪些索引可以使用
          * 哪些索引被實(shí)際使用
          * 表之間的引用
          * 每張表有多少行被優(yōu)化器查詢

          使用語(yǔ)法
          explain sql語(yǔ)句



          ?

          ?

          得到了什么結(jié)果

          expain出來(lái)的信息有10列,分別是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra




          字段概要解釋:

          * id:選擇標(biāo)識(shí)符
          * select_type:表示查詢的類型。
          * table:輸出結(jié)果集的表
          * partitions:匹配的分區(qū)
          * type:表示表的連接類型
          * possible_keys:表示查詢時(shí),可能使用的索引
          * key:表示實(shí)際使用的索引
          * key_len:索引字段的長(zhǎng)度
          * ref:列與索引的比較
          * rows:掃描出的行數(shù)(估算的行數(shù))
          * filtered:按表?xiàng)l件過(guò)濾的行百分比
          * Extra:執(zhí)行情況的描述和說(shuō)明
          ?

          字段詳細(xì)解釋

          一、 id
          SQL執(zhí)行查詢的順序的標(biāo)識(shí)
          1. id相同時(shí),執(zhí)行順序由上至下



          2. id不同時(shí),如果是子查詢,id的序號(hào)會(huì)遞增,id值越大優(yōu)先級(jí)越高,越先被執(zhí)行



          3. id相同和不同同時(shí)存在,id如果相同,可以認(rèn)為是一組,從上往下順序執(zhí)行;在所有組中,id值越大,優(yōu)先級(jí)越高,越先執(zhí)行



          ?

          ?

          二、select_type
          查詢中每個(gè)select子句的類型,主要用于區(qū)別普通查詢、聯(lián)合查詢、子查詢等復(fù)雜查詢
          (1) SIMPLE(簡(jiǎn)單SELECT,不使用UNION或子查詢等)
          (2) PRIMARY(子查詢中最外層查詢,查詢中若包含任何復(fù)雜的子部分,最外層的select被標(biāo)記為PRIMARY)
          (3) UNION(UNION中的第二個(gè)或后面的SELECT語(yǔ)句)
          (4) DEPENDENT UNION(UNION中的第二個(gè)或后面的SELECT語(yǔ)句,取決于外面的查詢)
          (5) UNION RESULT(UNION的結(jié)果,union語(yǔ)句中第二個(gè)select開(kāi)始后面所有select)
          (6) SUBQUERY(子查詢中的第一個(gè)SELECT,結(jié)果不依賴于外部查詢)
          (7) DEPENDENT SUBQUERY(子查詢中的第一個(gè)SELECT,依賴于外部查詢)
          (8) DERIVED(派生表的SELECT, FROM子句的子查詢)
          (9) UNCACHEABLE SUBQUERY(一個(gè)子查詢的結(jié)果不能被緩存,必須重新評(píng)估外鏈接的第一行)


          三、table
          顯示這一步所訪問(wèn)數(shù)據(jù)庫(kù)中表名稱(顯示這一行的數(shù)據(jù)是關(guān)于哪張表的)


          四、type

          表示MySQL在表中找到所需行的方式,又稱“訪問(wèn)類型”,常見(jiàn)類型如下:

          ?ALL, index,? range, ref, eq_ref, const, system, NULL

          從左到右,性能從最差到最好



          ?

          ?一般來(lái)說(shuō)。得保證查詢至少達(dá)到range級(jí)別,最好能達(dá)到ref。

          所有的訪問(wèn)類型排序:



          system:表只有一行記錄(等于系統(tǒng)表),這是const類型的特別,平時(shí)不會(huì)出現(xiàn),這個(gè)可以忽略不計(jì)。

          const:表示通過(guò)索引一次就找到了,const用于比較primary key或者unique索引,因?yàn)橹黄ヅ湟恍袛?shù)據(jù),所以很快
          如將主鍵置于where列表中,Mysql就能將該查詢轉(zhuǎn)換為一個(gè)常量

          eq_ref:唯一性索引掃描,對(duì)于每個(gè)索引鍵,表只只有一條記錄與之匹配。常見(jiàn)于主鍵或唯一索引掃描


          ref:非唯一性索引掃描,返回匹配某個(gè)單獨(dú)值的所有行,本質(zhì)上也是一種索引訪問(wèn),它返回匹配某個(gè)單獨(dú)值的行,然而,它可能會(huì)找到多個(gè)符合條件的行,索引他應(yīng)該屬于查找和掃描的混合體

          range:只檢索給定范圍的行,使用一個(gè)索引來(lái)選擇行。
          key列顯示使用了哪個(gè)索引,一般就是在你的where語(yǔ)句中出現(xiàn)了between、<、>、in等的查詢
          這種范圍掃描索引掃描比全表掃描要好,因?yàn)樗恍枰_(kāi)始于索引的某一點(diǎn),面結(jié)束另一點(diǎn),不用掃描全部索引。

          index: Full Index Scan,index與ALL區(qū)別為index類型只遍歷索引樹(shù),這通常比ALL快,因?yàn)樗饕募ǔ1葦?shù)據(jù)文件小,

          也就是說(shuō)雖然ALL和Index都是讀全表,但I(xiàn)ndex是從索引中讀取的,而ALL都是從磁盤中讀的。

          ALL:Full Table Scan, MySQL將遍歷全表以找到匹配的行。NULL:
          MySQL在優(yōu)化過(guò)程中分解語(yǔ)句,執(zhí)行時(shí)甚至不用訪問(wèn)表或索引,例如從一個(gè)索引列里選取最小值可以通過(guò)單獨(dú)索引查找完成。

          ?

          五、possible_keys
          顯示可能應(yīng)用在這張表中的索引,一個(gè)或多個(gè)。
          查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實(shí)際使用。
          簡(jiǎn)單來(lái)說(shuō),mysql認(rèn)為這條查詢可能用到哪些索引。

          ?

          六、Key

          key列顯示MySQL實(shí)際決定使用的鍵(索引),必然包含在possible_keys中

          如果沒(méi)有選擇索引,鍵是NULL。要想強(qiáng)制MySQL使用或忽視possible_keys列中的索引,在查詢中使用FORCE INDEX、USE
          INDEX或者IGNORE INDEX。

          ?

          七、key_len


          表示索引中使用的字節(jié)數(shù),可通過(guò)該列計(jì)算查詢中使用的索引的長(zhǎng)度(key_len顯示的值為索引字段的最大可能長(zhǎng)度,并非實(shí)際使用長(zhǎng)度,即key_len是根據(jù)表定義計(jì)算而得,不是通過(guò)表內(nèi)檢索出的)

          同樣的查詢結(jié)果夏,不損失精確性的情況下,長(zhǎng)度越短越好?。

          ?

          八、ref

          顯示索引的哪一列被使用了,如果可能的話,是一個(gè)常數(shù),哪些列或者常量被用于查詢索引列上的值。

          ?

          九、rows

          ?估算出結(jié)果集行數(shù),表示MySQL根據(jù)表統(tǒng)計(jì)信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數(shù)

          ?

          十、Extra

          該字段包含MySQL解決查詢的詳細(xì)信息,有以下幾種情況:

          Using filesort:

          說(shuō)明mysql會(huì)對(duì)數(shù)據(jù)使用一個(gè)外部的索引排序,而不是按照表內(nèi)的索引順序進(jìn)行讀取。

          Mysql中無(wú)法利用索引完成的排序操作稱為“文件排序”,如果出現(xiàn),要優(yōu)化此查詢。

          簡(jiǎn)單來(lái)說(shuō):Mysql并未按照你建立的索引去查找,

          ?

          Using temporary:

          使用了臨時(shí)表中保存中間結(jié)果,Mysql在對(duì)查詢結(jié)果排序時(shí)使用臨時(shí)表。常見(jiàn)于排序order by和分組查詢group by。

          ?

          Using index:

          表示相應(yīng)的select操作中使用了覆蓋索引(Covering Index),避免訪問(wèn)了表的數(shù)據(jù)行,效率不錯(cuò)。

          如果同時(shí)出現(xiàn)using where,表明索引被用于來(lái)執(zhí)行索引鍵值的查找。

          如果沒(méi)有同時(shí)出現(xiàn)wing where,表明索引用來(lái)讀取數(shù)據(jù)而非執(zhí)行查找動(dòng)作。

          ?

          Using where :

          表明使用了where過(guò)濾

          ?

          Using join buffer:

          使用了連接緩存

          ?

          impossible where:

          where子句中的值總是false,不能用來(lái)獲取任何元組

          友情鏈接
          ioDraw流程圖
          API參考文檔
          OK工具箱
          云服務(wù)器優(yōu)惠
          阿里云優(yōu)惠券
          騰訊云優(yōu)惠券
          京東云優(yōu)惠券
          站點(diǎn)信息
          問(wèn)題反饋
          郵箱:[email protected]
          QQ群:637538335
          關(guān)注微信

                国产综合久久7777777 | 成人性生活片无码免费 | 欧美性爱在线视频 | 丁香婷婷亚洲 | 乌克兰丰满少妇AV毛片 |