MySql性能調(diào)優(yōu)三(explain/desc執(zhí)行計(jì)劃)

前言

explian/desc可以幫助我們分析sql語(yǔ)句,寫(xiě)出高效sql語(yǔ)句,讓mysql查詢優(yōu)化器可以更好的工作。
mysql查詢優(yōu)化器會(huì)盡可能的使用索引,優(yōu)化器排除的數(shù)據(jù)行越多,mysql找到匹配數(shù)據(jù)行就越快。

用法

explain/desc + sql

explain select * from tbl_chain_bill where billid = 6

explain.png
key value means
id 1 查詢序列號(hào)
select_type SIMPLE 查詢類型
table tbl_chain_bill 表或派生表名
type const 掃描類型
possible_keys PRIMARY 可能用的索引,有多個(gè)
key PRIMARY 實(shí)際使用索引
key_len 8 使用的索引長(zhǎng)度,在不損失精度下,長(zhǎng)度越短越好
ref const 顯示索引的哪一列被使用了
rows 1 該語(yǔ)句掃描了多少行記錄
Extra (Null) sql語(yǔ)句額外信息,如排序分組等

分析

id

表示執(zhí)行select子句順序的標(biāo)識(shí)。id相同,順序由上至下;id越大,越先執(zhí)行。

select_type
  • SIMPLE:簡(jiǎn)單SELECT,不使用UNION或子查詢等;
  • PRIMARY:查詢中若包含任何復(fù)雜的子部分,最外層的select被標(biāo)記為PRIMARY;
  • UNION:UNION中的第二個(gè)或后面的SELECT語(yǔ)句;
  • UNION RESULT:UNION的結(jié)果;
  • SUBQUERY:子查詢中的第一個(gè)SELECT;
  • DERIVED:派生表的SELECT,F(xiàn)ROM子句的子查詢;
  • UNCACHEABLE SUBQUERY:結(jié)果集不能緩存的子查詢。
table

表示數(shù)據(jù)來(lái)源于哪張表或派生表。

image.png
type

從上到下,性能由差到好

  • ALL:從頭到尾全表掃描;
  • Index:全索引樹(shù)掃描,只遍歷索引樹(shù);
  • Range:只檢索給定的范圍,需要使用一個(gè)索引來(lái)選擇行,key代表使用的索引;
  • Ref:用于連接匹配的索引列不唯一時(shí),如where bill.billNo = billDetail.billNo;
  • Eq ref:用于連接匹配的索引列是unique或者primary key時(shí),如where bill.id = billDetail.billID;
  • const:用常數(shù)來(lái)比較primary key時(shí)嗎,比如where primary key = 123;
  • system:被查詢表只有一行記錄,用常數(shù)來(lái)比較primary key時(shí)。
extra

extra 中出現(xiàn)以下 2 項(xiàng)意味著 MYSQL 根本不能使用索引,效率會(huì)受到重大影響,應(yīng)盡可能對(duì)此進(jìn)行優(yōu)化。

Using filesort 表示 MySQL會(huì)對(duì)結(jié)果使用一個(gè)外部索引排序,而不是從表里按索引次序讀到相關(guān)內(nèi)容。可能在內(nèi)存或者磁盤(pán)上進(jìn)行排序。

Using temporary 表示 MySQL 在對(duì)查詢結(jié)果排序時(shí)使用臨時(shí)表。常見(jiàn)于排序 order by 和分組查詢 group by。

測(cè)試說(shuō)明

測(cè)試說(shuō)明.png

需要指出的是,上面例子關(guān)于type=ref或者eq_ref是因?yàn)槲ㄒ凰饕拇嬖?,如果連接條件沒(méi)有唯一性約束,那么還是記錄少的放在連接查詢的左邊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 轉(zhuǎn) # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    呂品?閱讀 10,140評(píng)論 0 44
  • 1.explain 使用explain關(guān)鍵字分析SQL語(yǔ)句的效率與執(zhí)行情況是基礎(chǔ); 例: 各列的含義如下: id:...
    Separes閱讀 2,091評(píng)論 0 6
  • 7.2.1. EXPLAIN語(yǔ)法(獲取SELECT相關(guān)信息) EXPLAINtbl_name 或: EXPLAIN...
    followyounger1閱讀 758評(píng)論 0 2
  • 最近發(fā)現(xiàn)默默喜歡說(shuō)好無(wú)聊啊,在她等待的時(shí)候她會(huì)說(shuō)等待好無(wú)聊啊,還會(huì)說(shuō)在家好無(wú)聊,幼兒園不無(wú)聊,今天還說(shuō)媽媽我想再上...
    大臉貓黑黑閱讀 162評(píng)論 0 0
  • 昨晚,為了一個(gè)人,睡不著??奁撕镁?,但是不管怎樣,都回不去了。沒(méi)人會(huì)為你改變的。自己也不可能去受這樣的委屈。 他...
    娜樣非凡123閱讀 283評(píng)論 0 0

友情鏈接更多精彩內(nèi)容