談談MySQL的執行計畫

2021-08-11 13:11:57 字數 1834 閱讀 4993

前言

檢視sql執行計畫

在mysql中檢視sql語句的執行計畫是很容易的,只需要在sql語句前面加上explain關鍵字,比如:

explain select * from tb_item_desc where item_id in (select id from tb_item);

這是我樣例資料庫中對內容表的乙個簡單的查詢,執行這條語句有,執行計畫是如下圖:

下面我們就以這個執行計畫為例介紹一下執行計畫中各個欄位的含義

1.id

這個字段表示的是sql語句的執行順序,因為這個sql語句中包含了子查詢,所以執行計畫中有兩條記錄,在這兩條記錄中id都是1,這就表明sql語句的執行順序是從上向下順序執行的,如果用到了聯合查詢,id值可能不同,這時sql語句的執行順序以id值從大向小執行。

2.select_type

這個字段表示的是選擇型別,這裡選擇的是******。

3.table

這個字段顧名思義,就是本次查詢用到了那些表。

4.type

這個字段比較重要,對sql的優化有指導意義,該值代表的是我們的sql使用了那種訪問型別,通過它可以知道是否使用了索引,使用了哪種型別的索引,type有以下幾種情況

all(全表掃瞄);

index(索引掃瞄);

range(範圍掃瞄);

ref(非唯一索引掃瞄);

eq_ref(唯一索引掃瞄);

const(常數引用)。

這幾種訪問型別的查詢效率是由慢到快的,因此我們在sql語句的編寫時要盡量避免使用全表掃瞄,尤其是對一些大表的掃瞄會對效能產生很大的影響,即使是單錶查詢也會很慢。

5.possible_keys

該值表示可能用到的索引,注意是可能,而不是實際使用的索引。有時候這個值不為空,但是依舊沒有使用索引。

6.key

該值表示的是實際使用的索引的名字,如果是主鍵索引就是primary,或者是自建索引的名字。

7.key_len

索引使用的位元組長度

8.ref

該值表示的是表連線匹配條件,如果用到了索引就是索引的名字,如果是全表掃瞄就是null。在上面的例子中,子查詢就是個全表掃瞄,索引ref值是null。

9.rows

表示掃瞄行數,掃瞄的行數越小,表明效率就越高,這個值在sql優化中也很有借鑑意義,通過優化索引,修改表關聯關係等各種方法來降低這個值。

10.extra

這個值非常重要,也是sql優化時必須看的乙個值,它表示的是我們的sql語句的真實執**況,上面我們的sql語句的子查詢中改值為:using index。改值常見的還有using where,using temporary,using filesort。我們在sql查詢語句中盡量使用索引,減少臨時表和檔案排序的使用,因為這對io效率有影響。

總結:

以上這些,就是我們在分析一條sql語句的執行計畫時,需要掌握的基本資訊。通過這些資訊可以讓我們了解應用中sql語句的執**況,從而有助於對sql語句的優化。千萬別小看了sql優化,可能乙個簡單的sql優化能使程式效能成倍提高。另外還要說的一點是,在一些高併發,大訪問量的應用系統中,盡量設計成單錶查詢,可能會違反資料庫設計正規化,造成資料冗餘,但在網際網路行業中,效能的提公升可能往往比儲存空間的浪費更重要。

mysql執行計畫 MySQL 執行計畫

1.執行計畫的定義 什麼是執行計畫 查詢計畫 呢?執行計畫就是一系列的操作步驟。sql是宣告性語言,它只告訴資料庫要查詢什麼,但並不告訴資料庫如何去查。資料庫所要做的就是基於演算法和統計資訊計算出一條最佳的訪問路徑。這個工作是由優化器來完成的。優化器會比較不同的執行計畫,然後選擇其中最優的一套。2....

mysql 生成執行計畫 MySQL執行計畫

和很多其他關係型資料庫不通,mysql並不會在生成查詢位元組碼來執行查詢。mysql生成查詢的一棵指令樹,然後通過儲存引擎執行完成這棵指令樹並返回結果。最終的執行計畫包含了重構查詢的全部資訊。如果某個查詢執行explain extended 之後,在執行show warnings,就可以看到重構出的...

mysql 查詢執行計畫 MySql執行計畫的檢視

一。什麼是資料庫執行計畫 利用乙個sql語句,你可能要server取出所有news表中的資訊.當server收到的這條sql的時候,第一件事情並不是解析它.如果這條sql沒有語法錯誤,server才會繼續工作.server會決定最好的計算方式.server會選擇,是讀整個news表好呢,還是利用索引...