mysql 語句查看表的索引


如何玩轉別人的sql是否執行高效呢,今天我們就分析一下索引的使用。

在大數據量數據庫中,我們寫出來的sql是否走索引了呢。如何你不知道,你寫出來的sql可抗自己哦。

下面我們就直接開始演示如何把自己寫的sql是否走索引了

 

1. explain+sql

explain select * from table_name where id=1
結果:

 

 

 

注釋:

    1.1 id
          標志這個sql語句被分為幾個(行數)獨立的sql執行,執行順序依照(1)從大到小(2)從上到下 依次排列執行;即select識別符,select的查詢序列號。

    1.2 select_type
          查詢類型

SIMPLE 簡單的select查詢,查詢中不包含子查詢或者UNION
PRIMARY 查詢中包含子查詢,其中最外層查詢為PRIMARY
SUBQUERY
別的查詢語句(select或where)中的子查詢

DERIVED 在FROM列表中包含的子查詢被標記為DERIVED(衍生),MySQL會遞歸執行這些子查詢,把結果放在臨時表中 ,臨時表
UNION 若第二個SELECT出現在UNION之后,則被標記為UNION:若UNION包含在FROM子句的子查詢中,外層SELECT將被標記為:DERIVED
UNION RESULT UNION的結果
   1.3 table
         表名

   1.4 type
         表示查詢用到了那種索引類型

system 表中只有一條記錄,一般來說只在系統表里出現。
const 表示通過一次索引查詢就查詢到了,一般對應索引列為primarykey 或者unique where語句中 指定 一個常量,因為只匹配一行數據,MYSQL能把這個查詢優化為一個常量,所以非常快。
eq_ref  唯一性索引掃描。此類型通常出現在多表的 join 查詢,對於每一個從前面的表連接的對應列,當前表的對應列具有唯一性索引,最多只有一行數據與之匹配。
ref 非唯一性索引掃描。同上,但當前表的對應列不具有唯一性索引,可能有多行數據匹配。此類型通常出現在多表的 join 查詢, 針對於非唯一或非主鍵索引, 或者是使用了 最左前綴 規則索引的查詢. 
range 索引的范圍查詢。查詢索引關鍵字某個范圍的值
index  全文索引掃描。與all基本相同,掃描了全文,但查詢的字段被索引包含,故不需要讀取表中數據,只需要讀取索引樹中的字段。
all  全文掃描。未使用索引,效率最低。
   1.5 ref
         顯示索引的哪一列被使用了

ref 顯示使用哪個列或常數與key一起從表中選擇行。在eq_ref 與ref中才不為null。
如果是使用的常數等值查詢,這里會顯示const,如果是連接查詢,被驅動表的執行計划這里會顯示驅動表的關聯字段,如果是條件使用了表達式或者函數,或者條件列發生了內部隱式轉換,這里可能顯示為func

 

   1.6 rows
        MySQL 查詢優化器根據統計信息, 估算 SQL 要查找到結果集需要掃描讀取的數據行數 這個值非常直觀顯示 SQL 的效率好壞, 原則上 rows 越少越好

   1.7 key 和 possible key 與 key_len

possible key 表示 MySQL 在查詢時, 能夠使用到的索引. 注意, 即使有些索引在 possible_keys 中出現, 但是並不表示此索引會真正地被 MySQL 使用到. MySQL 在查詢時具體使用了哪些索引, 由 key 字段決定.
key  顯示MySQL實際決定使用的鍵(索引)。如果沒有選擇索引,鍵是NULL。
key_len 顯示MySQL決定使用的鍵長度。如果鍵是NULL,則長度為NULL。 


   1.8 extra
         額外信息

Using Filesort 表示對結果排序時無法使用索引,使用了一個臨時索引對結果排序。
Using Temporary 在查詢中使用了臨時表保存中間結果。
Using Index 表示使用了覆蓋索引, 如果同時出現了Using Where 表示索引被同時用來查找對應的鍵,若未出現,則僅僅用來讀取數據。
Using Join Buffer 表示在查詢的時候 Join使用的非常多,使用了連接緩存,可以在配置文件中把緩沖區的join buffer調大一點。
Using where 使用了where
Impossible where  where后的值總是false 比如 (...where i=1 and i=2)
distinct 優化distinct操作,在找到第一匹配的元組后即停止找同樣值的動作


  1.9 filtered
        顯示了通過條件過濾出的行數的百分比估計值。

 

3. 查看索引

 

 

 

4. 刪除索引

 

 

 

 

參考文獻:https://blog.csdn.net/Abel_01_xu/article/details/93605602?depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-8&utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-8

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM