Hello 大家好,我是李輝,目前是新加坡某家大型跨國互聯網公司的 DBA 資深專家,常用網名門牙沒了混跡江湖。
從學校畢業以后,我就開始從事 MySQL DBA 的相關工作,到今天算下來也有將近 10 年了。在這 10 年的時間里,我也經歷了從職場實習生到 DBA 主管再到資深專家的一個過程。
現在回顧之前的工作歷程,剛畢業的時候,我的數據庫水平其實是很差的。在剛工作的那幾年,由于公司處于業務的爆發增長期,每天最重要的事情就是支撐線上業務,因此積累的數據庫相關的技能與經驗也非常碎片化,沒有構成完整的知識體系。
直到后來一個偶然的機會,朋友邀請我入伙一起做一個 MySQL 的技術培訓,這可是個難得的鍛煉自己的機會,我想都沒想就答應下來了。
在準備培訓內容的那段時期,才開始發現自己的內功并不是那么的深厚。擔心會誤人子弟,于是我去網上把 MySQL 相關的技術書籍都購買了回來,開始沒日沒夜的閱讀。
在朋友的指導下,以及事先做好的這些功課,我們最終圓滿的完成了這期 MySQL 技術培訓,懸著的心終于松了一口氣。得益于此,我的 MySQL 技術體系也有了一個質的飛躍,在后來換工作的時候,拿到了多個大廠的 offer。
在互聯網公司工作了很多年,在日常的工作中,每天都需要和程序員們溝通業務。在和他們打交道的過程中,至今仍然讓我頭痛的就是 MySQL 相關的一些問題。
“為毛不讓上線?” “為毛不能這樣用,非要改?” “你們 DBA 是不是非要卡我們一下刷個存在感?”
每當面對這樣的場景,我只能表示無可奈何(手動攤手),一次又一次的給他們解釋,這個地方為什么要這么用,這個地方為什么要這么設計,等等等等。但是互聯網行業的工作速度如行軍打仗,在 deadline 面前,所有的解釋和努力都是蒼白的,最后只好帶著一堆的問題匆匆上線。
那應該如何解決這些問題?在我還在前東家新浪彩票工作的時候,曾經花了大半年的時間去處理這些問題:制定 MySQL 開發規范,給他們培訓 MySQL 相關的知識。最終成效顯著,程序員們都規規矩矩的按照 DBA 的開發規范來設計數據模型,該用 tinyint 的地方絕不用 int,不讓用外鍵的地方就老老實實撤掉外鍵,可能產生鎖的事務就仔細做設計,等等不一一舉例。
那么是我們制定的開發規范起作用了嗎?我個人認為在這個過程中開發規范的作用是比較微弱的,真正讓程序員們從心底接受 DBA 的建議,規規矩矩的使用 DB,是因為他們了解了這背后的底層原理,以及如果不這樣做會導致什么樣的后果。
一直以來我都有一個想法,把程序員們需要的 MySQL 知識點匯總成冊,不管是在公司工作,還是出去面試,這些必備的 MySQL 知識都能讓你游刃有余的應對,在面試中脫穎而出,亦或是不再和 DBA 們干仗。
所以,在這個專欄里,我會以程序員在面試 MySQL 相關場景為驅動,給你講解 MySQL 數據庫的 SQL 知識、事務和鎖、性能指標、性能調優等數據庫相關的知識點。每個小節都會從面試官的角度對這個知識點進行深挖,讓你從此不畏懼面試。
經過一段時間的思考,本專欄面向程序員朋友們日常工作中所需的 MySQL 技能樹,設計了大概 3 個模塊:包括 SQL 編程、事務和鎖、MySQL Server。每個模塊都甄選了面試時的一些高頻問題做出詳細深入的解答,讓大家能知其然也知其所以然。具體的內容大家可以直接查看專欄目錄,這里就不贅述了。在專欄的擬題階段刪除了和 DBA 相關但是與程序員無關的全部內容,不做無效的學習。
好了,不多廢話,讓我們一起開始本專欄的學習吧。
衷心的祝愿大家在閱讀過本專欄后都能有所收獲,輕松通過面試!