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