這篇文章主要講解了“查詢(xún)語(yǔ)句過(guò)程和EXPLAIN語(yǔ)句的基本概念及其優(yōu)化”,文中的講解內容簡(jiǎn)單清晰,易于學(xué)習與理解,下面請大家跟著(zhù)小編的思路慢慢深入,一起來(lái)研究和學(xué)習“MySQL查詢(xún)語(yǔ)句過(guò)程和EXPLAIN語(yǔ)句的基本概念及其優(yōu)化”吧!
網(wǎng)站或服務(wù)的性能關(guān)鍵點(diǎn)很大程度在于數據庫的設計(假設你選擇了合適的語(yǔ)言開(kāi)發(fā)框架)以及如何查詢(xún)數據上。
我們知道MySQL的性能優(yōu)化方法,一般有建立索引、規避復雜聯(lián)合查詢(xún)、設置冗余字段、建立中間表、查詢(xún)緩存等,也知道用EXPLAIN來(lái)查看執行計劃。
但對MySQL復雜查詢(xún)語(yǔ)句執行過(guò)程和內部機制,MySQL Optimizer本身所做優(yōu)化以及查詢(xún)語(yǔ)句調整對性能所產(chǎn)生的影響及其原因知之甚少。
本文試圖對其中的一些關(guān)鍵概念如執行過(guò)程、索引使用等做比較深入的探討,知其然,知其所以然,
這樣可以避免在原本通過(guò)MySQL簡(jiǎn)單優(yōu)化就能獲得很好效果的情況下,盲目跟風(fēng)轉向存儲或者投入資金升級基礎設施。
工欲善其事,必先利其器,這里首先介紹MySQL查詢(xún)語(yǔ)句性能分析工具。
MySQL的EXPLAIN命令是用來(lái)分析查詢(xún)性能的工具,EXPLAIN的輸出每一行對應于查詢(xún)語(yǔ)句中的一張表的執行計劃說(shuō)明,其輸出列含義如下表:
上表中type列是表關(guān)聯(lián)類(lèi)型,常見(jiàn)的有如下類(lèi)型(按關(guān)聯(lián)查詢(xún)效率從高到低排列):
const(常量連接),比如SELECT * FROM user WHERE id=1;
eq_ref(等值引用),比如SELECT * FROM user,card WHERE user.id=card.userid;
ref(引用),用于非唯一索引,比如SELECT * FROM user,card WHERE user.last_name='test';
range(范圍),比如SELECT * FROM tbl_name WHERE key_column > 10;
index(索引),根據索引來(lái)讀取數據,如果索引已包含了查詢(xún)數據,只需掃描索引樹(shù),否則執行全表掃描和All類(lèi)似;
ALL(所有),全表掃描
key列代表索引(index),rows表示估計會(huì )掃描多少行記錄,
Extra表示附加信息,常見(jiàn)的有如下幾種(也按查詢(xún)效率從高到低排列):
Using index:表示使用索引,如果同時(shí)出現Using where,代表使用索引來(lái)查找讀取記錄,如果沒(méi)有Using where,表示索引包含查詢(xún)數據,無(wú)需額外的查找;
Using where:表示條件查詢(xún),如果type列是ALL或index,而沒(méi)有出現該信息,則你有可能在執行錯誤的查詢(xún):返回所有數據;
Using filesort:不是“使用文件索引”的含義!filesort是MySQL所實(shí)現的一種排序策略,通常在使用到排序語(yǔ)句ORDER BY的時(shí)候,會(huì )出現該信息;
Using temporary:表示為了得到結果,使用了臨時(shí)表,這通常是出現在多表聯(lián)合查詢(xún),結果排序的場(chǎng)合;
如果EXPLAIN出現后面兩個(gè)信息(Using filesort,Using temporary),而rows又比較大,通常意味著(zhù)你需要調整查詢(xún)語(yǔ)句,或者需要添加索引,總之需要盡量消除這兩個(gè)信息。
下面給出EXPLAIN結果實(shí)例(從用戶(hù)檔案表中找出昵稱(chēng)和性別,按用戶(hù)表中的用戶(hù)關(guān)注者數量排序):
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。
Copyright ? 2009-2022 56dr.com. All Rights Reserved. 特網(wǎng)科技 特網(wǎng)云 版權所有 特網(wǎng)科技 粵ICP備16109289號
域名注冊服務(wù)機構:阿里云計算有限公司(萬(wàn)網(wǎng)) 域名服務(wù)機構:煙臺帝思普網(wǎng)絡(luò )科技有限公司(DNSPod) CDN服務(wù):阿里云計算有限公司 百度云 中國互聯(lián)網(wǎng)舉報中心 增值電信業(yè)務(wù)經(jīng)營(yíng)許可證B2
建議您使用Chrome、Firefox、Edge、IE10及以上版本和360等主流瀏覽器瀏覽本網(wǎng)站