在實際開發中我們不免要用到explain檢視我們編寫的sql語句執行效率。
往往有的時候我們會發現在寫複雜的sql語句的時候資料庫執行的效率會很慢,這個時候我們檢視表計畫就會方便我們修改sql語句提高工作效率同時提公升系統的效能。
執行計畫的生成方法:explain select * from student;
type:這是重要的列,顯示連線使用了何種型別。效率從最好到最差的連線型別為const、eq_reg、ref、range、 indexhe和all
.extra列返回的描述的意義:
distinct:一旦mysql找到了與行相聯合匹配的行,就不再搜尋了
not exists: mysql優化了left join,一旦它找到了匹配left join標準的行,就不再搜尋了
range checked for each record(index map:#):沒有找到理想的索引,因此對於從前面表中來的每乙個行組合,mysql檢查使用哪個索引,並用它來從表中返回行。這是使用索引的最慢的連線之一
using filesort: 看到這個的時候,查詢就需要優化了。mysql需要進行額外的步驟來發現如何對返回的行排序。它根據連線型別以及儲存排序鍵值和匹配條件的全部行的行指標來排序全部行
using index: 列資料是從僅僅使用了索引中的資訊而沒有讀取實際的行動的表返回的,這發生在對錶的全部的請求列都是同乙個索引的部分的時候
using temporary 看到這個的時候,查詢需要優化了。這裡,mysql需要建立乙個臨時表來儲存結果,這通常發生在對不同的列集進行order by上,而不是group by上
where used 使用了where從句來限制哪些行將與下一張表匹配或者是返回給使用者。如果不想返回表中的全部行,並且連線型別all或index,這就會發生,或者是查詢有問題不同連線型別的解釋(按照效率高低的順序排序)
system 表只有一行:system表。這是const連線型別的特殊情況
const:表中的乙個記錄的最大值能夠匹配這個查詢(索引可以是主鍵或惟一索引)。因為只有一行,這個值實際就是常數,因為mysql先讀這個值然後把它當做常數來對待
eq_ref:在連線中,mysql在查詢時,從前面的表中,對每乙個記錄的聯合都從表中讀取乙個記錄,它在查詢使用了索引為主鍵或惟一鍵的全部時使用
ref:這個連線型別只有在查詢使用了不是惟一或主鍵的鍵或者是這些型別的部分(比如,利用最左邊字首)時發生。對於之前的表的每乙個行聯合,全部記錄都將從表中讀出。這個型別嚴重依賴於根據索引匹配的記錄多少—越少越好
range:這個連線型別使用索引返回乙個範圍中的行,比如使用》或《查詢東西時發生的情況
index: 這個連線型別對前面的表中的每乙個記錄聯合進行完全掃瞄(比all更好,因為索引一般小於表資料)
all:這個連線型別對於前面的每乙個記錄聯合進行完全掃瞄,這一般比較糟糕,應該盡量避免.
舉例說明:
mysql檢視計畫 mysql檢視表計畫
在實際開發中我們不免要用到explain檢視我們編寫的sql語句執行效率。往往有的時候我們會發現在寫複雜的sql語句的時候資料庫執行的效率會很慢,這個時候我們檢視表計畫就會方便我們修改sql語句提高工作效率同時提公升系統的效能。執行計畫的生成方法 explain select from studen...
mysql檢視表結構索引 mysql檢視表結構命令
mysql檢視表結構命令,如下 desc 表名 show columns from 表名 describe 表名 show create table 表名 use information schema select from columns where table name 表名 順便記下 show...
mysql 檢視表結構
連線到mysql d mysql 5.6.10 winx64 bin mysql h192.168.1.1 u root proot hip u使用者名稱 p密碼 url 檢視表結構 url quote 檢視表結構資訊 本人相看,得到相同的結果 1.desc 表名 2.show columns fr...