天天看點

Mysql之執行計劃

1.explain分析sql語句

  例如:

 傳回結果:

Mysql之執行計劃

而今天檢查的不是這條sql,遠比這條複雜,不過也能反映情況了。

(1)使用視圖導緻sql在執行過程中需要用中間表,就是using temporary。 因為視圖無法使用索引,這也導緻性能會比較低效。

(2)當有order by出現時,而且排序字段沒有添加索引,那就會導緻using filesort,導緻磁盤的檔案排序。

(3)而因為uam_view_unit_account 這個視圖是union4張表得出的(union result),這裡面rows和type都無法提高性能。

2.屬性解析

隻記幾個重要的屬性:

Mysql之執行計劃
Mysql之執行計劃
Mysql之執行計劃
Mysql之執行計劃

(1)type顯示的是通路類型,是較為重要的一個名額,結果值從好到壞依次是:

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > all

一般來說,得保證查詢至少達到range級别,最好能達到ref,否則就可能會出現性能問題。

Mysql之執行計劃
Mysql之執行計劃

(1)要讓查詢盡可能的快,就應該注意 extra 字段的值為usingfilesort 和 using temporary 的情況。

3.小總結

(1)如果發現某條sql執行非常慢,那就需要将直接sql在資料庫裡進行explain分析。

(2)檢視explain的表格,重點檢視裡面的type、rows、extra三個屬性。

     1.type為all或index;

     2.extra有using filesort或using temporary;

     3.rows的數值跟其表的資料條數差不多;

     這個時候代表這條sql急需優化了。

(3)根據分析提示建相關的索引,甚至是修改sql寫法,以便提高效率。

轉載:http://www.cnblogs.com/lovesong/p/3793522.html