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