Mysql explain 执行计划 解释
一:Mysql explain 執行計劃
前言:
 使用 explain 執行sql計劃,以便分析Sql執行過程 涉及多少行、使用哪些索引、運行時間等 以便進行優化。
 如:
 
 explain 名詞解釋:
| id | SQL執行的順序的標識,SQL從大到小的執行 | 
說明: id 不同連接類型的解釋
id相同時,執行順序由上至下
如果是子查詢,id的序號會遞增,id值越大優先級越高,越先被執行
id如果相同,可以認為是一組,從上往下順序執行;在所有組中,id值越大,優先級越高,越先執行
| table | 顯示這一行的數據是關于哪張表的 | 
| select_type | 查詢中每個select子句的類型 | 
說明: select_type 不同連接類型的解釋
| type | 這是重要的列,顯示連接使用了何種類型。從最好到最差的連接類型為const、eq_reg、ref、range、indexhe和ALL | 
說明: type 不同連接類型的解釋(按照效率高低的順序排序)
| possible_keys | 顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從WHERE語句中選擇一個合適的語句 | 
| key | 實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會選擇優化不足的索引。這種情況下,可以在SELECT語句中使用USE INDEX(indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引 | 
| key_len | 使用的索引的長度。在不損失精確性的情況下,長度越短越好 | 
| ref | 顯示索引的哪一列被使用了,如果可能的話,是一個常數 | 
| rows | MYSQL認為必須檢查的用來返回請求數據的行數 | 
| Extra | 關于MYSQL如何解析查詢的額外信息。將在表4.3中討論,但這里可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結果是檢索會很慢 | 
說明:extra列返回的描述的意義
Distinct :一旦mysql找到了與行相聯合匹配的行,就不再搜索了。
Not exists :mysql優化了LEFT JOIN,一旦它找到了匹配LEFT JOIN標準的行,就不再搜索了。
 Range checked for each Record(index map:#) :沒有找到理想的索引,因此對從前面表中來的每一個行組合,mysql檢查使用哪個索引,并用它來從表中返回行。這是使用索引的最慢的連接之一。
Using filesort :看到這個的時候,查詢就需要優化了。mysql需要進行額外的步驟來發現如何對返回的行排序。它根據連接類型以及存儲排序鍵值和匹配條件的全部行的行指針來排序全部行。
Using index :列數據是從僅僅使用了索引中的信息而沒有讀取實際的行動的表返回的,這發生在對表的全部的請求列都是同一個索引的部分的時候。
Using where:表示優化器需要通過索引回表查詢數據;
Using where && Using index:自己認為:Using index 不讀數據文件,只從索引文件中獲取數據。Using where 只是過濾元組
Using temporary :看到這個的時候,查詢需要優化了。這里,mysql需要創建一個臨時表來存儲結果,這通常發生在對不同的列集進行ORDER BY上,而不是GROUP BY上。 當使用 DISTINCT 關鍵字 也會出現該狀態
Where used :使用了WHERE從句來限制哪些行將與下一張表匹配或者是返回給用戶。如果不想返回表中的全部行,并且連接類型ALL或index,這就會發生,或者是查詢有問題。
什么是:索引回表?
如果索引的列在select子句中則不需要回表。
 如果 select 子句中有大量的非索引列,就要讀取索引存放對應的rowid,然后按照 rowid 去表中找到對應行的非索引列,這就叫回表
總結
以上是生活随笔為你收集整理的Mysql explain 执行计划 解释的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 学妹跑过来问我为啥Xshell 打不开了
- 下一篇: 基于神经网络的指纹识别,指纹比对技术何时
