MySQL explain執行計畫優化

2021-08-03 19:36:19 字數 2221 閱讀 2477

先發現問題(慢查詢,explain,  profile)

對於使用索引和沒有使用索引,了解到索引可以快速去查詢資料

了解什麼是索引(索引是排好序的快速查詢的資料結構)

索引的管理(檢視,建立,刪除)

索引的本身的資料結構(b-tree結構和聚簇結構)

mysql是如何去使用這些索引的(explain工具),需要去發現索引是否合理的被使用,防止索引濫用。

注意:索引對查詢是有幫助的,但是對更新是沒有好處的。索引要建立的合理。

mysql調優的乙個通用思路(面試題):通過上面的步驟就可以對mysql進行調優,只要將上面的步驟重複不斷執行,可以使用mysql在最優的情況下工作。

profile定義:mysql提供的乙個可以分析sql語句執行過程的工具,通過它大致可以了解到mysql將如何執行使用者傳遞過來的sql語句。

用法使用的時候只要在對應的sql語句前面,加上關鍵字explain 或者同義詞 desc

# desc select * from tablename where id = 1000000;

#explain select * from tablename where id = 1000000;

以上兩條sql執行效果是等價的。

可以先簡單對比 有索引 和 無索引 執行計畫:

no_index無索引的情況下分析:

rows:代表查詢滿足該sql語句的結果,可能需要查詢行的數量。

id存在主鍵索引的情況下分析:

type:重點分析

all 代表全表掃瞄,一般在不使用索引的情況下回出現該值

全表掃瞄:一行一行的逐行比較,然後返回滿足條件的記錄。

const,代表使用了主鍵索引。

開發之中,盡量出現這個。常量查詢

9. type=range :  range代表範圍操作,當執行的sql語句是乙個範圍查詢的時候,也可以使用索引。

range含**釋:由於索引是排好序的結構。沿著這個有序的結構,再去擷取一段有序的資料,是可以利用上索引的。

面試題:什麼樣的字段適合建立索引?(建立索引的時候有什麼考慮?)

答:(1)在where條件後面作為查詢的字段需要建立索引。

(2)在(排序order ,範圍range ,分組group)這些情況下也是可以使用索引的。

注意:在where條件後也不是所有的字段都建立索引,因為索引本身也是有開銷的。

index代表使用了索引

當做記錄統計的時候,可以直接使用索引返回記錄的行數,就沒必要去對磁碟檔案的行數做統計。

system,當表中的記錄只有一行的時候,mysql認為可以直接的返回記錄資訊,而不必要使用索引檔案。一般出現在

一行記錄(自己建立的表)或者

系統級別的表(mysql.user)一般mysql在啟動的時候,會將部分的系統級別的表優先載入到記憶體做乙個快取。

null,可能出現,如果出現這個,也代表很好。基本不容易出現。

總結:null 》system》const》range》index》all

注意:盡量不要出現all

本文永久更新鏈結位址

Mysql explain 執行計畫

使用方法,在select語句前加上explain就可以了 如 explain select from test1 explain列的解釋 table 顯示這一行的資料是關於哪張表的 type 這是重要的列,顯示連線使用了何種型別。從最好到最差的連線型別為const eq reg ref range ...

MySql Explain執行計畫

explain執行計畫 例 explain select from user idselect type table partitions type possible keys keykey len refrows filtered extra id 查詢序列號,表示查詢中執行select子句或操作...

MySQL Explain 執行計畫

執行計畫就是sql的執行查詢的順序,以及如何使用索引查詢,返回的結果集行數,可以根據執行計畫結果結合業務對現有sql進行優化 explain 查詢結果有10列,分別表示的含義是 是乙個有序的編號,是查詢的順序號,有幾個select就顯示幾行,id的順序是按照select出現的順序增長的,id列的值越...