本文小編為大家詳細介紹“MySQL的explain如何使用”,內容詳細,步驟清晰,細節(jié)處理妥當,希望這篇“MySQL的explain如何使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學習新知識吧。
專注于為中小企業(yè)提供成都網站建設、成都網站制作服務,電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)鎮(zhèn)海免費做網站提供優(yōu)質的服務。我們立足成都,凝聚了一批互聯(lián)網行業(yè)人才,有力地推動了上千企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網站建設實現(xiàn)規(guī)模擴充和轉變。
??通過explain語句,我們可以分析出以下結果
表的讀取順序 | 數據讀取操作的操作類型 |
---|---|
表之間的引用 | 哪些索引可以使用 |
每張表有多少行被優(yōu)化器查詢 | 哪些索引被實際使用 |
??用法:explain + SQL 語句;
MariaDB [class_info]> explain select * from student; +--+-----------+-------+----+-------------+-----+-------+-----+----+-----+ |id|select_type| table |type|possible_keys| key |key_len| ref |rows|Extra| +--+-----------+-------+----+-------------+-----+-------+-----+----+-----+ | 1| SIMPLE |student| ALL| NULL | NULL| NULL | NULL| 1 | | +--+-----------+-------+----+-------------+-----+-------+-----+----+-----+ 1 row in set (0.00 sec)
??expain出來10個字段,分別是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra
??概要描述:
字段 | 描述 |
---|---|
id | 選擇標識符 |
select_type | 查詢的類型 |
table | 輸出結果集的表 |
type | 表的連接類型 |
possible_keys | 查詢時可能使用的索引 |
key | 實際使用的索引 |
key_len | 索引字段的長度 |
ref | 列與索引的比較 |
rows | 掃描出的行數(估算的行數) |
Extra | 執(zhí)行情況的描述和說明 |
??id
是select查詢的序列號,包含一組數字,表示查詢中執(zhí)行select子句或操作表的順序。id的結果有以下三種情況:
??● id 相同,執(zhí)行順序由上至下,與sql中順序無關
??● 如果是子查詢,id的序號會遞增,id越大優(yōu)先級越高,越先被執(zhí)行
??● id 如果相同,可以認為是一組,從上往下順序執(zhí)行;在所有組中id值越大,優(yōu)先級越高,越先執(zhí)行。
??select_type
顯示示查詢中每個select子句的類型,常用的select_type的類型有simple、primary、subquery、derived、union、union result
??(1) simple(簡單select,不使用union或子查詢等任何復雜查詢)
??(2) primary(子查詢中最外層查詢,查詢中若包含任何復雜的子部分,最外層的select被標記為primary)
??(3) subquery(在select或where列表中包含了子查詢)
??(4) derived(在from列表中包含的子查詢被標記為derived(衍生),MySQL會遞歸執(zhí)行這些子查詢,把結果放在臨時表中)
??(5) union(union中的第二個或后面的select語句)
??(6) union result(union的結果,union語句中第二個select開始后面所有select)
??table
顯示這一步所訪問數據庫中表名稱 (顯示這一行的數據是關于哪張表的)。
??type
所顯示的是查詢使用了哪種類型,type包含的類型有all、index、range、ref、eq_ref、const、system、NULL,它的性能依次遞增。
??● all:Full Table Scan, MySQL將遍歷全表以找到匹配的行
??● index: Full Index Scan,index與ALL區(qū)別為index類型只遍歷索引樹
??● range:只檢索給定范圍的行,使用一個索引來選擇行
??● ref: 表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值
??● eq_ref: 類似ref,區(qū)別就在使用的索引是唯一索引,對于每個索引鍵值,表中只有一條記錄匹配,簡單來說,就是多表連接中使用primary key或者 unique key作為關聯(lián)條件
??● const、system: 當MySQL對查詢某部分進行優(yōu)化,并轉換為一個常量時,使用這些類型訪問。如將主鍵置于where列表中,MySQL就能將該查詢轉換為一個常量,system是const類型的特例,當查詢的表只有一行的情況下使用system。
??● NULL: MySQL在優(yōu)化過程中分解語句,執(zhí)行時甚至不用訪問表或索引,例如從一個索引列里選取最小值可以通過單獨索引查找完成。
??possible_keys
顯示可能應用在這張表中的索引,一個或多個。查詢涉及到的字段上若存在索引,則該索引將被列出,但不一定被查詢實際使用。(該查詢可以利用的索引,如果沒有任何索引顯示 null)
??key
顯示MySQL實際決定使用的鍵(索引),必然包含在possible_keys中。如果沒有選擇索引,則是NULL。要想強制MySQL使用或忽視possible_keys列中的索引,在查詢中使用force index
、use index
或者 ignore index
。
??key_len
表示索引中使用的字節(jié)數,可通過該列計算查詢中使用的索引的長度(key_len顯示的值為索引字段的最大可能長度,并非實際使用長度,即key_len是根據表定義計算而得,不是通過表內檢索出的),在不損失精確性的情況下,長度越短越好
。
??ref
顯示索引的那一列被使用,表示上述表的連接匹配條件,即哪些列或常量被用于查找索引列上的值
??rows
估算出結果集的行數,表示MySQL根據表統(tǒng)計信息及索引選用情況,估算的找到所需的記錄所需要讀取的行數。
??Extra
該列包含MySQL解決查詢的詳細信息,有以下幾種情況:
??的請求列都是同一個索引的部分的時候,表示mysql服務器將在存儲引擎檢索行后再進行過濾
??● Using temporary表示MySQL需要使用臨時表來存儲結果集,常見于排序和分組查詢,常見 group by ; order by
??● Using filesort當Query中包含 order by 操作,而且無法利用索引完成的排序操作稱為“文件排序”
??● Using join buffer改值強調了在獲取連接條件時沒有使用索引,并且需要連接緩沖區(qū)來存儲中間結果。如果出現(xiàn)了這個值,那應該注意,根據查詢的具體情況可能需要添加索引來改進能。
??● Impossible where這個值強調了where語句會導致沒有符合條件的行(通過收集統(tǒng)計信息不可能存在結果)。
??● Select tables optimized away這個值意味著僅通過使用索引,優(yōu)化器可能僅從聚合函數結果中返回一行
??● No tables used Query語句中使用from dual 或不含任何from子句
讀到這里,這篇“MySQL的explain如何使用”文章已經介紹完畢,想要掌握這篇文章的知識點還需要大家自己動手實踐使用過才能領會,如果想了解更多相關內容的文章,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網頁題目:MySQL的explain如何使用
當前鏈接:http://chinadenli.net/article46/pgdheg.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供ChatGPT、微信公眾號、網站排名、品牌網站設計、網站制作、電子商務
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)