資源描述:
《mysql查看sql語(yǔ)句執(zhí)行效率》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫(kù)。
1、0MySQL查看SQL語(yǔ)句執(zhí)行效率Explain命令在解決數(shù)據(jù)庫(kù)性能上是第一推薦使用命令,大部分的性能問(wèn)題可以通過(guò)此命令來(lái)簡(jiǎn)單的解決,Explain可以用來(lái)查看SQL語(yǔ)句的執(zhí)行效果,可以幫助選擇更好的索引和優(yōu)化查詢語(yǔ)句,寫(xiě)出更好的優(yōu)化語(yǔ)句。Explain語(yǔ)法:explainselect…from…[where...]例如:explainselect*fromnews;輸出:+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+
2、i
3、d
4、select_type
5、table
6、type
7、possible_keys
8、key
9、key_len
10、ref
11、rows
12、Extra
13、+----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+下面對(duì)各個(gè)屬性進(jìn)行了解:1、id:這是SELECT的查詢序列號(hào)2、select_type:select_type就是select的類型,可以有以下幾種:SIMPLE:簡(jiǎn)單SELECT(不使用UNION或子查詢等)PRIMARY:最外面的SELECT
14、UNION:UNION中的第二個(gè)或后面的SELECT語(yǔ)句DEPENDENTUNION:UNION中的第二個(gè)或后面的SELECT語(yǔ)句,取決于外面的查詢UNIONRESULT:UNION的結(jié)果。SUBQUERY:子查詢中的第一個(gè)SELECTDEPENDENTSUBQUERY:子查詢中的第一個(gè)SELECT,取決于外面的查詢DERIVED:導(dǎo)出表的SELECT(FROM子句的子查詢)3、table:顯示這一行的數(shù)據(jù)是關(guān)于哪張表的4、type:這列最重要,顯示了連接使用了哪種類別,有無(wú)使用索引,是使用Explain命令分析性能瓶頸的關(guān)鍵項(xiàng)之一。結(jié)果值從好到壞依次是:system>c
15、onst>eq_ref>ref>fulltext>ref_or_null>index_merge>unique_subquery>index_subquery>range>index>ALL一般來(lái)說(shuō),得保證查詢至少達(dá)到range級(jí)別,最好能達(dá)到ref,否則就可能會(huì)出現(xiàn)性能問(wèn)題。5、possible_keys:列指出MySQL能使用哪個(gè)索引在該表中找到行6、key:顯示MySQL實(shí)際決定使用的鍵(索引)。如果沒(méi)有選擇索引,鍵是NULL7、key_len:顯示MySQL決定使用的鍵長(zhǎng)度。如果鍵是NULL,則長(zhǎng)度為NULL。使用的索引的長(zhǎng)度。在不損失精確性的情況下,長(zhǎng)度越短越好
16、8、ref:顯示使用哪個(gè)列或常數(shù)與key一起從表中選擇行。9、rows:顯示MySQL認(rèn)為它執(zhí)行查詢時(shí)必須檢查的行數(shù)。10、Extra:包含MySQL解決查詢的詳細(xì)信息,也是關(guān)鍵參考項(xiàng)之一。Distinct一旦MYSQL找到了與行相聯(lián)合匹配的行,就不再搜索了NotexistsMYSQL優(yōu)化了LEFTJOIN,一旦它找到了匹配LEFTJOIN標(biāo)準(zhǔn)的行,就不再搜索了RangecheckedforeachRecord(indexmap:#)沒(méi)有找到理想的索引,因此對(duì)于從前面表中來(lái)的每一個(gè)行組合,MYSQL檢查使用哪個(gè)索引,并用它來(lái)從表中返回行。這是使用索引的最慢的連接之一Usi
17、ngfilesort看到這個(gè)的時(shí)候,查詢就需要優(yōu)化了。MYSQL需要進(jìn)行額外的步驟來(lái)發(fā)現(xiàn)如何對(duì)返回的行排序。它根據(jù)連接類型以及存儲(chǔ)排序鍵值和匹配條件的全部行的行指針來(lái)排序全部行Usingindex列數(shù)據(jù)是從僅僅使用了索引中的信息而沒(méi)有讀取實(shí)際的行動(dòng)的表返回的,這發(fā)生在對(duì)表的全部的請(qǐng)求列都是同一個(gè)索引的部分的時(shí)候Usingtemporary看到這個(gè)的時(shí)候,查詢需要優(yōu)化了。這里,MYSQL需要?jiǎng)?chuàng)建一個(gè)臨時(shí)表來(lái)存儲(chǔ)結(jié)果,這通常發(fā)生在對(duì)不同的列集進(jìn)行ORDERBY上,而不是GROUPBY上Usingwhere使用了WHERE從句來(lái)限制哪些行將與下一張表匹配或者是返回給用戶。如果不
18、想返回表中的全部行,并且連接類型ALL或index,這就會(huì)發(fā)生,或者是查詢有問(wèn)題其他一些Tip:1.當(dāng)type顯示為“index”時(shí),并且Extra顯示為“UsingIndex”,表明使用了覆蓋索引。