你好,我是馬聽(tīng),現(xiàn)在是某零售公司的 MySQL DBA,身處一線的我表示有很多話要講,首先歡迎大家來(lái)到我的專欄,我將帶你進(jìn)入數(shù)據(jù)庫(kù)優(yōu)化與提升第一課。
1 我的 MySQL 學(xué)習(xí)歷程
在我大三的時(shí)候,就開(kāi)始接觸到 MySQL 了,當(dāng)時(shí)我也是從最基礎(chǔ)的 MySQL 知識(shí)(比如建表、字段修改、增刪查改等)開(kāi)始學(xué)習(xí)的,當(dāng)學(xué)完簡(jiǎn)單的語(yǔ)句之后,感覺(jué)特有成就感:),認(rèn)為自己在 MySQL 方面已經(jīng)很強(qiáng)了,感覺(jué) MySQL 用起來(lái)無(wú)非也就這些內(nèi)容,還能有什么?
直到剛畢業(yè)入職某互聯(lián)網(wǎng)公司時(shí),公司電商業(yè)務(wù)的數(shù)據(jù)庫(kù)突然出現(xiàn)高負(fù)載報(bào)警,并且業(yè)務(wù)反應(yīng)很多接口都出奇的慢,這時(shí)一位數(shù)據(jù)庫(kù)運(yùn)維同事馬上連上數(shù)據(jù)庫(kù),在執(zhí)行了幾條命令后,就確定了是慢查詢導(dǎo)致數(shù)據(jù)庫(kù)高負(fù)載的,通過(guò)改寫 SQL 語(yǔ)句能讓性能得到改善。他馬上通知開(kāi)發(fā)改寫了代碼,發(fā)完版之后負(fù)載立馬下來(lái)了。
此時(shí),我了解到身處前線的我們,隨時(shí)隨地會(huì)遇到各種“麻煩”,而面臨這些境遇就要求我們必須系統(tǒng)的提高和優(yōu)化對(duì)于數(shù)據(jù)庫(kù)的管理。
如果你有嘗試看過(guò) MySQL 的官方手冊(cè),看了兩三章之后你會(huì)發(fā)現(xiàn)這樣效率太低了。這就是本專欄的由來(lái),我總結(jié)多年的數(shù)據(jù)庫(kù)學(xué)習(xí)和管理經(jīng)驗(yàn),帶你帶系統(tǒng)的研究下真正的 MySQL ,對(duì)于 SQL 語(yǔ)句優(yōu)化、索引原理、MySQL 鎖、事務(wù)、MySQL 安全、分庫(kù)分表、讀寫分離、MySQL 操作規(guī)范等這些內(nèi)容,我在后面專欄都會(huì)一一進(jìn)行分析和演示,也會(huì)給大家精心準(zhǔn)備了相關(guān)的思考題。
比如,進(jìn)行數(shù)據(jù)導(dǎo)入時(shí),如何進(jìn)行優(yōu)化 ?工作中有一次,開(kāi)發(fā)一個(gè)同事想在他的測(cè)試環(huán)境導(dǎo)入一張大表,他發(fā)現(xiàn)每次都要花半小時(shí)以上,就找到了我?guī)兔?,看完他?MySQL 參數(shù)配置后,我會(huì)發(fā)現(xiàn)其實(shí)有些參數(shù)可以調(diào)整的,調(diào)整完之后,讓他再繼續(xù)測(cè)試,發(fā)現(xiàn)不到 10 分鐘就搞定了,是不是高效了很多,MySQL 的優(yōu)化中有太多這樣例子了。
那俗話說(shuō):磨刀不誤砍柴工,我們花越多的時(shí)間來(lái)學(xué)習(xí),其實(shí)也是為提高工作時(shí)效率,節(jié)約了我們更多的時(shí)間,下面我們一起來(lái)深入研究下 MySQL 優(yōu)化和提升時(shí)里面的要點(diǎn)和細(xì)節(jié)吧。
2 哪些人需要學(xué)習(xí) MySQL 優(yōu)化
說(shuō)了這么多,那究竟有哪些人需要學(xué)習(xí) MySQL 優(yōu)化呢?
首先,當(dāng)然 DBA 是必須學(xué)習(xí)的,因?yàn)榉治雎樵?,并且去?yōu)化慢查詢是 DBA 的工作之一。
其次,開(kāi)發(fā)也應(yīng)該學(xué)習(xí) MySQL 優(yōu)化,我以前遇到過(guò)一個(gè)開(kāi)發(fā)能力比較強(qiáng)的同事,去 BAT 某大廠面試開(kāi)發(fā)工作,其他技術(shù)基本沒(méi)問(wèn)題,而當(dāng)問(wèn)到 MySQL 索引和事務(wù)以及優(yōu)化相關(guān)問(wèn)題時(shí),就卡住了,最終錯(cuò)失進(jìn)入大廠的機(jī)會(huì),人生真的好難…淚奔。不單單面試,在工作中,如果開(kāi)發(fā)懂得數(shù)據(jù)庫(kù)優(yōu)化,很多情況就不用 DBA 來(lái)審核找出問(wèn)題再回過(guò)頭去改代碼,會(huì)大大節(jié)約了時(shí)間成本,完美 :)
當(dāng)然,其他對(duì)于 MySQL 感興趣的人,也是可以學(xué)學(xué)優(yōu)化技巧的,歡迎歡迎歡迎,讓你的 SQL 執(zhí)行效率更高。
3 提升 MySQL 水平的方式
分享下我自己學(xué)習(xí) MySQL 的歷程,小伙伴們有需要的可以借鑒下,在這里,總結(jié)一下我的 MySQL 提升水平的方式:
如果你沒(méi)有 MySQL 的基礎(chǔ),建議可以看下面兩本書(shū)籍,看完之后,可以簡(jiǎn)單處理一些優(yōu)化:
- 《MySQL 必知必會(huì)》:主要講 SQL 的寫法;
- 《深入淺出 MySQL》:比較全面的講解了 MySQL 的基礎(chǔ)知識(shí),也涉及了一些優(yōu)化。
如果已經(jīng)對(duì) MySQL 比較熟悉了,可以看下面的書(shū)籍,你會(huì)對(duì)索引和鎖以及事務(wù)等有全新的看法:
- 《高性能 MySQL》:里面講了很多 MySQL 優(yōu)化技巧;
- 《MySQL 技術(shù)內(nèi)幕》:講解了很多 MySQL 原理,強(qiáng)力推薦給想深入學(xué)習(xí) MySQL 的同學(xué);
- 《MySQL 內(nèi)核:InnoDB 存儲(chǔ)引擎》:想深入研究 MySQL 內(nèi)核及原理的可以看看;
- 《MySQL 運(yùn)維內(nèi)參》:對(duì) MySQL 源碼感興趣,可以入手;
- 《MySQL Internals Manual》https://dev.mysql.com/doc/internals/en/ ;
- 《MySQL 8.0 Reference Manual》https://dev.mysql.com/doc/refman/8.0/en/ 。
如果已經(jīng)掌握了 MySQL 的基礎(chǔ)知識(shí),可以選擇看本專欄,本專欄將很多優(yōu)化 MySQL 的技巧都總結(jié)好了,并且分享了很多作者工作中遇到的問(wèn)題。各位小伙伴們,我會(huì)陪你一步步來(lái)成長(zhǎng),不著急:)
4 學(xué)習(xí)本專欄前的提醒
最后,如果你購(gòu)買了本專欄,下面這些信息可能需要告訴你:
- 閱讀前需要知道增刪查改、子查詢、關(guān)聯(lián)查詢、group by 和 order by 等語(yǔ)法。
- 如果沒(méi)特別說(shuō)明,本專欄默認(rèn)使用的 MySQL 版本為 8.0.25,事務(wù)隔離級(jí)別為 RR,表的存儲(chǔ)引擎為 InnoDB。
- 如果專欄中有不正確的地方,歡迎在留言區(qū)指正。