使用 explain 關鍵字可以模擬優化器執行sql查詢語句,從而知道mysql是如何處理你的sql語句的。這可以幫你分析你的查詢語句或是表結構的效能瓶頸。通過explain命令可以得到:
– 表的讀取順序
– 資料讀取操作的操作型別
– 哪些索引可以使用
– 哪些索引被實際使用
– 表之間的引用
– 每張表有多少行被優化器查詢
explain欄位:
table:顯示這一行的資料是關於哪張表的
select_type:查詢中每個select子句的型別
possible_keys:顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where語句中選擇乙個合適的語句
key:實際使用的索引。如果為null,則沒有使用索引。mysql很少會選擇優化不足的索引,此時可以在select語句中使用use index(index)來強制使用乙個索引或者用ignore index(index)來強制忽略索引
key_len:使用的索引的長度。在不損失精確性的情況下,長度越短越好
ref:顯示索引的哪一列被使用了,如果可能的話,是乙個常數
rows:mysql認為必須檢索的用來返回請求資料的行數
type:這是最重要的字段之一,顯示查詢使用了何種型別。從最好到最差的連線型別為system、const、eq_reg、ref、range、index和all
extra:關於mysql如何解析查詢的額外資訊,主要有以下幾種:
關於索引
索引的型別
● 普通索引:這是最基本的索引型別,沒唯一性之類的限制。
● 唯一性索引:和普通索引基本相同,但所有的索引列值保持唯一性。
● 主鍵:主鍵是一種唯一索引,但必須指定為」primary key」。
● 全文索引:mysql從3.23.23開始支援全文索引和全文檢索。在mysql中,全文索引的索引型別為fulltext。全文索引可以在varchar或者text型別的列上建立。
大多數mysql索引(primary key、unique、index和fulltext)使用b樹中儲存。空間列型別的索引使用r-樹,memory表支援hash索引。
單列索引和多列索引(復合索引)
索引可以是單列索引,也可以是多列索引。對相關的列使用索引是提高select操作效能的最佳途徑之一。
多列索引:
mysql可以為多個列建立索引。乙個索引可以包括15個列。對於某些列型別,可以索引列的左字首,列的順序非常重要。
多列索引可以視為包含通過連線索引列的值而建立的值的排序的陣列。一般來說,即使是限制最嚴格的單列索引,它的限制能力也遠遠低於多列索引。
Explain分析查詢語句
表的讀取順序 讀取操作的型別 可用索引,實際使用的索引 表之間的引用 每張表多少行被優化器查詢 索引的長度 explain欄位解釋 table 顯示這一行的資料是關於哪張表的 possible keys 顯示可能應用在這張表中的索引。如果為空,沒有可能的索引。可以為相關的域從where語句中選擇乙個...
查詢優化之EXPLAIN的使用分析
不同的sql語句寫法,往往會帶來很大的效能差異,我們怎麼才能知道執行sql查詢開銷呢?mysql為我們提供了explain關鍵詞,在你的select語句前加上explain關鍵詞,mysql將解釋它是如何處理的select查詢,提供有關表如何聯接和聯接的次序,所掃瞄的記錄數等相關資訊,你可以憑藉這些...
效能分析 explain
1.id 查詢中select子句或操作表的順序 id相同,執行順序由上到下 id不同,越大優先順序越高 2.select type 查詢型別,主要區別於普通查詢 聯合查詢 子查詢 複雜查詢 簡單的查詢 pimary 查詢中包含任何複雜的子部分,最外層標記為primary derived 在from中...