日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

分析查詢語句 Explain

作者:Franklin_xc 更新時間: 2022-07-26 編程語言

分析查詢語句 Explain

  1. table: 查詢的每一行記錄都對應著一個單表(有可能有臨時表,union去重)

  2. id:在一個大的查詢語句中每個SELECT關鍵字都對應著一個唯一的id(查詢優化器可能對涉及及子查詢的語句進行重寫,轉變為多表查詢的操作)
    a. id如果相同,可以認為是一組,從上往下順序執行
    b. 在所有組中,id值越大,優先級越高,越先執行
    c. 一個id號碼,表示一趟獨立的查詢,一個sql的查詢趟數越少越好

  3. select_type: 對應那個查詢的類型,確定小查詢在整個大查詢中扮演了一個什么角色。
    查詢語句中不包含union或者子查詢都是simple,連接查詢也是simple
    union 最左邊的就是primary
    后面的是union
    會多一條臨時表,用來去重
    子查詢:subquery,如果子查詢中用到的主查詢,就是dependent query
    from中有select 就是派生表,derived

  4. partition:數據在哪個分區

  5. type:訪問方法

    1. 當表中只有一條記錄,并且該表使用的存儲引擎統計數據是精確的。比如是myisam或者memory,那么對該表的訪問方法就是system
    2. 當我們根據主鍵或者唯一 二級索引與常數進行等值匹配時,對單表的訪問是const
    3. 在連接查詢的時候,如果被驅動表是通過主鍵或者唯一二級索引列等值匹配的方式進行訪問的。(如果該主鍵或者唯一二級索引是聯合索引的話,所有的索引列都必須是等值比較)。則對該被驅動表的訪問方式是eq_ref
    4. 當通過普通的二級索引列與常量進行等值匹配時來查詢某個表,那么對該表的訪問方法可能是ref(隱式轉換會導致索引失效)
    5. 當通過普通的二級索引列與常量進行等值匹配,該索引值也可以為NULL時,來查詢某個表,那么對該表的訪問方法可能是ref or null
    6. 單表訪問,在某些場景下可以使用union sort union 這幾種索引合并的方式來執行查詢,那么對該表的訪問方法可能是index_merge
    7. 在這里插入圖片描述
    8. 如果索引獲取某些范圍區間的記錄,那么就可能使用到range訪問方法
    9. 當我們可以使用索引覆蓋,但需要掃描全部的索引記錄是,該表的訪問方法就是index
    10. 全表掃描 all
    11. 在這里插入圖片描述

possible_keys/ keys

  1. possible_keys可能用到的索引
  2. keys 實際用到的索引

key_len

實際使用到的索引長度(字節數) 幫你檢查是否充分的利用上了索引,值越大越好,主要針對聯合索引

ref

當使用索引列等值查詢的時候,與索引列進行等值匹配的對象信息

  1. 常數類型const
  2. 某個列
  3. 某個函數

rows

預估的需要讀取的記錄條數(越小越好)

filtered

某個表經過搜索條件過濾后,剩余記錄 數的百分比。

索引失效

  1. 違反最左前綴原則
  2. 計算,函數,類型轉換(自動或者手動)會導致索引失效
  3. 范圍條件的右邊的列失效
  4. 不等于<> != 索引失效
  5. is null 可以使用索引,is not null 無法使用索引 not like 也同樣
  6. like 以通配符%開頭,索引失效(alibaba:sql查詢 嚴禁左模糊或全模糊)
  7. or前后出現非索引的列,索引失效,因為中間有一個沒有索引,還是得全表掃描
  8. 數據庫和表的字符集統一使用utf8mb4,一定要統一,如果轉換就會索引失效

建議

  1. 對于單列索引,盡量選擇針對當前query過旅行更好的索引
  2. 在選擇組合索引的時候,當前query中過濾性最好的字段,在索引字段順序中,位置越靠前越好
  3. 在選擇組合索引的時候,盡量選擇能夠包含當前query中的where子句中更多字段的索引
  4. 在選擇組合索引的時候,如果某個字段可能出現范圍查詢,盡量把這個字段放在索引次序的最后面。
  5. 總之盡量避免造成索引失效的情況

關聯查詢優化

  1. 左外連接
  2. 內連接
    1. 對于內連接來講,如果表的連接條件中,只有一個字段有索引,則有索引的字段會被作為被驅動表。
    2. 在兩個表的連接都存在索引的情況下,會選擇小表,作為驅動表(小表驅動大表)

原文鏈接:https://blog.csdn.net/weixin_42293662/article/details/125974893

欄目分類
最近更新