您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“全面分析MySQL的細(xì)節(jié)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“全面分析MySQL的細(xì)節(jié)”吧!
一、EXPLAIN
做MySQL優(yōu)化,我們要善用 EXPLAIN 查看SQL執(zhí)行計(jì)劃。
下面來(lái)個(gè)簡(jiǎn)單的示例,標(biāo)注(1,2,3,4,5)我們要重點(diǎn)關(guān)注的數(shù)據(jù)type列,連接類型。一個(gè)好的sql語(yǔ)句至少要達(dá)到range級(jí)別。杜絕出現(xiàn)all級(jí)別
key列,使用到的索引名。如果沒有選擇索引,值是。可以采取強(qiáng)制索引方式
key_len列,索引長(zhǎng)度
rows列,掃描行數(shù)。該值是個(gè)預(yù)估值
extra列,詳細(xì)說(shuō)明。注意常見的不太友好的值有:Using filesort, Using temporary
二、SQL語(yǔ)句中IN包含的值不應(yīng)過(guò)多
MySQL對(duì)于IN做了相應(yīng)的優(yōu)化,即將IN中的常量全部存儲(chǔ)在一個(gè)數(shù)組里面,而且這個(gè)數(shù)組是排好序的。但是如果數(shù)值較多,產(chǎn)生的消耗也是比較大的。再例如:select id from table_name where num in(1,2,3)
對(duì)于連續(xù)的數(shù)值,能用 between 就不要用in
了;再或者使用連接來(lái)替換。
三、SELECT語(yǔ)句務(wù)必指明字段名稱
SELECT *增加很多不必要的消耗(cpu、io、內(nèi)存、網(wǎng)絡(luò)帶寬);增加了使用覆蓋索引的可能性;當(dāng)表結(jié)構(gòu)發(fā)生改變時(shí),前斷也需要更新。所以要求直接在select后面接上字段名。
四、當(dāng)只需要一條數(shù)據(jù)的時(shí)候,使用limit 1
這是為了使EXPLAIN中type列達(dá)到const類型
五、如果排序字段沒有用到索引,就盡量少排序
六、如果限制條件中其他字段沒有索引,盡量少用or
到此,相信大家對(duì)“全面分析MySQL的細(xì)節(jié)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。