Mysql分析-explain的詳細介紹

為什么要了解explain:

想了解select查詢的內(nèi)部情況,查詢優(yōu)化器是如何工作的,是否使用到了索引,explain可以做到。

MySQL查詢優(yōu)化器是如何工作的?:

MySQL查詢優(yōu)化器有幾個目標,但是其中最主要的目標是盡可能地使用索引,并且使用最嚴格的索引來消除盡可能多的數(shù)據(jù)行。最終目標是提交SELECT語句查找數(shù)據(jù)行,而不是排除數(shù)據(jù)行。優(yōu)化器試圖排除數(shù)據(jù)行的原因在于它排除數(shù)據(jù)行的速度越快,那么找到與條件匹配的數(shù)據(jù)行也就越快。如果能夠首先進行最嚴格的測試,查詢就可以執(zhí)行地更快。

一.explain共有十個屬性參數(shù)Mysql分析-explain的詳細介紹

二.EXPLAIN列的解釋:

1.id:選定的執(zhí)行計劃中查詢的序列號。表示查詢中執(zhí)行select子句或操作表的順序,id值越大優(yōu)先級越高,越先被執(zhí)行。id相同,執(zhí)行順序由上至下。

2.select_type查詢類型,說明:

Mysql分析-explain的詳細介紹

3.table:顯示這一行的數(shù)據(jù)是關(guān)于哪張表的

4.type:這是重要的列,顯示連接使用了何種類型

從最好到最差的連接類型為const、eq_reg、ref、range、index和ALL

Mysql分析-explain的詳細介紹

5.possible_keys顯示可能應(yīng)用在這張表中的索引。如果為空,沒有可能的索引。可以為相關(guān)的域從WHERE語句中選擇一個合適的語句

6.key?實際使用的索引。如果為NULL,則沒有使用索引。很少的情況下,MYSQL會選擇優(yōu)化不足的索引。這種情況下,可以在SELECT語句中使用USEINDEX(indexname)來強制使用一個索引或者用IGNORE INDEX(indexname)來強制MYSQL忽略索引

7.key_len使用的索引的長度。在不損失精確性的情況下,長度越短越好

8.ref顯示索引的哪一列被使用了,如果可能的話,是一個常數(shù)

9.rows:MYSQL認為必須檢查的用來返回請求數(shù)據(jù)的行數(shù)

10.Extra:關(guān)于MYSQL如何解析查詢的額外信息這里可以看到的壞的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,結(jié)果是檢索會很慢,應(yīng)該避免。

Mysql分析-explain的詳細介紹

很顯然,當type是ALL,即最壞的情況。Extra里還出現(xiàn)了Using filesort,也是最壞的情況,優(yōu)化是必須的。?

索引不是添加的越多越好的,在不同數(shù)量級的表中,是有取舍的,本身維護索引可能也會成為一種負擔(dān),要會合理的添加索引。

用explain看看,你的語句該優(yōu)化了嗎?

?以上就是Mysql分析-explain的詳細介紹的內(nèi)容,更多相關(guān)內(nèi)容請關(guān)注PHP中文網(wǎng)(www.php.cn)!

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊7 分享