日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql-explain

發(fā)布時間:2025/3/15 数据库 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql-explain 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、總體看一下explain各字段

二、id

  • select查詢的序列號,包含一組數(shù)字,表示查詢中執(zhí)行select子句或操作表的順序
  • 三種情況:
  • id相同,執(zhí)行順序由上至下
  • id不同,如果是子查詢,id的序號會遞增,id值越大優(yōu)先級越高,越先被執(zhí)行
  • id相同或者不同的情況都同時存在
  • 關(guān)注點(diǎn):id號每個號碼,表示一趟獨(dú)立的查詢。一個sql 的查詢趟數(shù)越少越好。
  • 二、 select_type

  • 有哪些
  • 查詢的類型,主要是用于區(qū)別:普通查詢、聯(lián)合查詢、子查詢等的復(fù)雜查詢
  • SIMPLE:簡單的 select 查詢,查詢中不包含子查詢或者UNION
  • PRIMARY:查詢中若包含任何復(fù)雜的子部分,最外層查詢則被標(biāo)記為Primary
  • DERIVED:在FROM列表中包含的子查詢被標(biāo)記為DERIVED(衍生)MySQL會遞歸執(zhí)行這些子查詢, 把結(jié)果放在臨時表里。
  • SUBQUERY:在SELECT或WHERE列表中包含了子查詢
  • DEPENDENT SUBQUERY:在SELECT或WHERE列表中包含了子查詢,子查詢基于外層
  • UNCACHEABLE SUBQUREY:一般在查詢系統(tǒng)變量時就是這種類型,因為系統(tǒng)變量都會變的,是不可能直接從緩存中拿的
  • UNION:若第二個SELECT出現(xiàn)在UNION之后,則被標(biāo)記為UNION;若UNION包含在FROM子句的子查詢中,外層SELECT將被標(biāo)記為:DERIVED
  • UNION RESULT:從UNION表獲取結(jié)果的SELECT
  • 三、table:

    顯示這一行的數(shù)據(jù)是關(guān)于哪張表的

    四、partitions:

    代表分區(qū)表中的命中情況,非分區(qū)表,該項為null

    五、type:


    type顯示的是訪問類型,是較為重要的一個指標(biāo),結(jié)果值從最好到最壞依次是:

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

    一般來說,得保證查詢至少達(dá)到range級別,最好能達(dá)到ref。

  • system:表只有一行記錄(等于系統(tǒng)表),這是const類型的特列,平時不會出現(xiàn),這個也可以忽略不計
  • const:表示通過索引一次就找到了,const用于比較primary key或者unique索引。因為只匹配一行數(shù)據(jù),所以很快如將主鍵置于where列表中,MySQL就能將該查詢轉(zhuǎn)換為一個常量
  • eq_ref:唯一性索引掃描,對于每個索引鍵,表中只有一條記錄與之匹配。常見于主鍵或唯一索引掃描
  • ref:非唯一性索引掃描,返回匹配某個單獨(dú)值的所有行.
    本質(zhì)上也是一種索引訪問,它返回所有匹配某個單獨(dú)值的行,然而,它可能會找到多個符合條件的行,所以他應(yīng)該屬于查找和掃描的混合體
  • range:只檢索給定范圍的行,使用一個索引來選擇行。key 列顯示使用了哪個索引,一般就是在你的where語句中出現(xiàn)了between、<、>、in等的查詢,這種范圍掃描索引掃描比全表掃描要好,因為它只需要開始于索引的某一點(diǎn),而結(jié)束語另一點(diǎn),不用掃描全部索引。
  • index:出現(xiàn)index是sql使用了索引但是沒用通過索引進(jìn)行過濾,一般是使用了覆蓋索引或者是利用索引進(jìn)行了排序分組
  • all:Full Table Scan,將遍歷全表以找到匹配的行
  • index_merge:在查詢過程中需要多個索引組合使用,通常出現(xiàn)在有 or 的關(guān)鍵字的sql中
  • ref_or_null:對于某個字段既需要關(guān)聯(lián)條件,也需要null值得情況下。查詢優(yōu)化器會選擇用ref_or_null連接查詢。
  • index_subquery:利用索引來關(guān)聯(lián)子查詢,不再全表掃描。
  • unique_subquery :該聯(lián)接類型類似于index_subquery。 子查詢中的唯一索引
  • 備注:一般來說,得保證查詢至少達(dá)到range級別,最好能達(dá)到ref。
  • 六、possible_keys:

    顯示可能應(yīng)用在這張表中的索引,一個或多個。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實(shí)際使用

    七、key:

    1.實(shí)際使用的索引。如果為NULL,則沒有使用索引
    2.查詢中若使用了覆蓋索引,則該索引和查詢的select字段重疊

    八、key_len:

    1.表示索引中使用的字節(jié)數(shù),可通過該列計算查詢中使用的索引的長度。
    2.key_len字段能夠幫你檢查是否充分的利用上了索引

    九、ref:

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

    十、rows:

    rows列顯示MySQL認(rèn)為它執(zhí)行查詢時必須檢查的行數(shù)。

    十一、filtered:

    這個字段表示存儲引擎返回的數(shù)據(jù)在server層過濾后,剩下多少滿足查詢的記錄數(shù)量的比例,注意是百分比,不是具體記錄數(shù)

    十二、Extra:

  • Using filesort(速度慢):說明mysql會對數(shù)據(jù)使用一個外部的索引排序,而不是按照表內(nèi)的索引順序進(jìn)行讀取。MySQL中無法利用索引完成的排序操作稱為“文件排序”
  • Using temporary (速度慢):使了用臨時表保存中間結(jié)果,MySQL在對查詢結(jié)果排序時使用臨時表。常見于排序 order by 和分組查詢 group by。
  • USING index: 表示相應(yīng)的select操作中使用了覆蓋索引(Covering Index),避免訪問了表的數(shù)據(jù)行,效率不錯!
    如果同時出現(xiàn)using where,表明索引被用來執(zhí)行索引鍵值的查找;
    如果沒有同時出現(xiàn)using where,表明索引只是用來讀取數(shù)據(jù)而非利用索引執(zhí)行查找?;蛘?:利用索引進(jìn)行了排序或分組。
  • Using where:表明使用了where過濾(效率比較好)
  • using join buffer(速度慢):使用了連接緩存
  • impossible where (sql寫錯,如 i>2 and i<1): where子句的值總是false,不能用來獲取任何元組
  • select tables optimized away(用上了優(yōu)化器,少見): 在沒有GROUPBY子句的情況下,基于索引優(yōu)化MIN/MAX操作,或者對于MyISAM存儲引擎優(yōu)化COUNT(*)操作,不必等到執(zhí)行階段再進(jìn)行計算,查詢執(zhí)行計劃生成的階段即完成優(yōu)化。
  • 總結(jié)

    以上是生活随笔為你收集整理的mysql-explain的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。