MySQL EXPLAIN語(yǔ)句的使用
MySQL EXPLAIN語(yǔ)句可以獲得關(guān)于MySQL如何執(zhí)行SELECT語(yǔ)句的信息,下面就為您介紹該語(yǔ)句的使用說(shuō)明,供您參考學(xué)習(xí)。
EXPLAIN tbl_name
或:EXPLAIN [EXTENDED] SELECT select_options
MySQL EXPLAIN語(yǔ)句可以用作DESCRIBE的一個(gè)同義詞,或獲得關(guān)于MySQL如何執(zhí)行SELECT語(yǔ)句的信息:
EXPLAIN tbl_name是DESCRIBE tbl_name或SHOW COLUMNS FROM tbl_name的一個(gè)同義詞。·
如果在SELECT語(yǔ)句前放上關(guān)鍵詞EXPLAIN,MySQL將解釋它如何處理SELECT,提供有關(guān)表如何聯(lián)接和聯(lián)接的次序。
借助于MySQL EXPLAIN語(yǔ)句,可以知道什么時(shí)候必須為表加入索引以得到一個(gè)使用索引來(lái)尋找記錄的更快的SELECT。如果由于使用不正確的索引出現(xiàn)了問(wèn)題,應(yīng)運(yùn)行ANALYZE TABLE更新表的統(tǒng)計(jì)(例如關(guān)鍵字集的勢(shì)),這樣會(huì)影響優(yōu)化器進(jìn)行的選擇。
還可以知道優(yōu)化器是否以一個(gè)***次序聯(lián)接表。為了強(qiáng)制優(yōu)化器讓一個(gè)SELECT語(yǔ)句按照表命名順序的聯(lián)接次序,語(yǔ)句應(yīng)以STRAIGHT_JOIN而不只是SELECT開頭。
MySQL EXPLAIN語(yǔ)句為用于SELECT語(yǔ)句中的每個(gè)表返回一行信息。表以它們?cè)谔幚聿樵冞^(guò)程中將被MySQL讀入的順序被列出。MySQL用一遍掃描多次聯(lián)接(single-sweep multi-join)的方式解決所有聯(lián)接。這意味著MySQL從***個(gè)表中讀一行,然后找到在第二個(gè)表中的一個(gè)匹配行,然后在第3個(gè)表中等等。當(dāng)所有的表處理完后,它輸出選中的列并且返回表清單直到找到一個(gè)有更多的匹配行的表。從該表讀入下一行并繼續(xù)處理下一個(gè)表。
當(dāng)使用EXTENDED關(guān)鍵字時(shí),EXPLAIN產(chǎn)生附加信息,可以用SHOW WARNINGS瀏覽。該信息顯示優(yōu)化器限定SELECT語(yǔ)句中的表和列名,重寫并且執(zhí)行優(yōu)化規(guī)則后SELECT語(yǔ)句是什么樣子,并且還可能包括優(yōu)化過(guò)程的其它注解。
【編輯推薦】