吃透這款最流行的數(shù)據(jù)庫,技術(shù)生涯就穩(wěn)了
還真是不可以,我們來說說這是為什么。
01用好 MySQL 是技術(shù)人的基本盤
在技術(shù)人的職業(yè)生涯中,除了專注于數(shù)據(jù)庫技術(shù)的 DBA,無論是做開發(fā)崗、運維崗還是測試崗,也都需要透徹了解 MySQL,因為決定系統(tǒng)服務(wù)質(zhì)量的關(guān)鍵節(jié)點就在這里。 如果程序員只會寫 SQL 語句,慢查詢影響了用戶體驗,不會優(yōu)化怎么行?對于運維來說,如果不清楚 MySQL 的底層原理,怎么實施主從同步、讀寫分離,做好數(shù)據(jù)備份和恢復(fù)呢? 所以,熟悉 MySQL 就和掌握編程語言一樣重要,是技術(shù)人的職業(yè)技能基本盤中重要的一部分。 但是不經(jīng)過系統(tǒng)化的學(xué)習(xí),技術(shù)人很可能會掉進(jìn)一個陷阱,就是對于搜索得來的結(jié)果不加分辨地去使用。可想而知,要么是別人的方案在自己的環(huán)境里不適用,要么解決一個問題又引入新的問題,疲于應(yīng)付。 不想讓 MySQL 成為職業(yè)生涯的瓶頸,那就靜下心來學(xué)透它吧。不必畏懼網(wǎng)上浩如煙海的資料,要筑牢 MySQL 的基本盤,看兩本好書就夠了。這兩本書分別是《MySQL是怎樣使用的:快速入門MySQL》與《MySQL是怎樣運行的:從根兒上理解MySQL》。 前一本是小白入門,后一本是高手進(jìn)階。這兩本書不是堆砌術(shù)語的枯燥說明書,而是相當(dāng)生動有趣,有示例有代碼,有圖有真相,不信你翻開看看。 02打穩(wěn)底盤:學(xué)會使用 MySQL
如果你是零基礎(chǔ)的朋友,看到這里請不要放棄,因為這一章就是專門為你準(zhǔn)備的。 MySQL 屬于關(guān)系型數(shù)據(jù)庫,那么一定要把關(guān)系型數(shù)據(jù)庫的理論學(xué)完才能上手實操嗎?完全不必,看《MySQL是怎樣使用的:快速入門MySQL》就可以??催@直白的書名就知道,它注重的就是從實踐入手,以練促學(xué)。 在學(xué)習(xí)本書時,可以分為三個階段:? 安裝 MySQL 服務(wù)。書中詳細(xì)描述了在 Windows 平臺上的安裝過程,并說明如何啟動與關(guān)閉服務(wù);
? 創(chuàng)建數(shù)據(jù)庫與表。書中說明了命令行工具的使用方法,學(xué)會使用MySQL客戶端程序連接數(shù)據(jù)庫服務(wù)。接下來執(zhí)行創(chuàng)建數(shù)據(jù)庫,定義表數(shù)據(jù)類型、創(chuàng)建數(shù)據(jù)表,插入一些測試數(shù)據(jù)等任務(wù);
? 掌握查詢數(shù)據(jù)的方法。SQL 是通用的結(jié)構(gòu)化查詢語言,應(yīng)用系統(tǒng)通過 SQL 取得數(shù)據(jù)并呈現(xiàn)出來。書中詳細(xì)說明了分組查詢、子查詢、連接查詢、并集查詢等技術(shù),這是學(xué)習(xí)者要投入最多的時間去反復(fù)練習(xí)和熟練運用的知識。
能將一個數(shù)據(jù)查詢請求快速編寫為一條 SQL 語言指令,使用 MySQL 的底盤就打穩(wěn)了。再進(jìn)一步,如果要優(yōu)化復(fù)雜應(yīng)用系統(tǒng)的查詢效率,解決慢查詢問題的瓶頸,那就一定要知道 MySQL 的底層知識。 讓我們繼續(xù)前進(jìn),成為 MySQL 的高手吧。 03成為高手:摸透底層,MySQL 進(jìn)階
MySQL 是一款開源軟件,對于喜歡追根究底的朋友來說,一頭扎到代碼里去就是摸透底層最直接的辦法。但我不建議你這樣做,因為 MySQL 有著 2000 多萬行代碼,體量巨大,架構(gòu)十分復(fù)雜,貿(mào)然進(jìn)入只會陷在代碼的迷宮里。 要怎么摸透 MySQL 的底層呢?一個好辦法就是站在前行者的肩膀上來學(xué)習(xí)?,F(xiàn)在就可以來看《MySQL是怎樣運行的:從根兒上理解MySQL》了。我們一起在書中探索一下MySQL 的根上都是什么。 數(shù)據(jù)庫軟件最重要的核心部件是存儲引擎,MySQL 默認(rèn)使用的是 InnoDB 存儲引擎。InnoDB 被設(shè)計為處理大容量數(shù)據(jù)時可以最大化性能,也就是說在 CPU 運行周期內(nèi)盡可能多地計算數(shù)據(jù)。 InnoDB 本身的架構(gòu)和實現(xiàn)是非常復(fù)雜的,但書中沒有一上來就列舉一堆讓人眼花繚亂的概念,而是從 InnoDB 的頁結(jié)構(gòu)說起。以 COMPACT 和 REDUNDANT 行格式為例,說明一條記錄是如何被存儲的。
記錄真實數(shù)據(jù)的兩條記錄
清楚了數(shù)據(jù)的存儲格式,接下來最重要的議題就是 InnoDB 實現(xiàn)數(shù)據(jù)快速查詢的原理——B+樹索引。書中先對 B+樹的數(shù)據(jù)結(jié)構(gòu)與算法進(jìn)行了介紹,然后說明了 InnoDB 索引的兩種類型:聚簇索引與二級索引。
新建 B+樹
理解了 InnoDB 的索引技術(shù)的原理,書中就對創(chuàng)建和使用索引提出了具體的建議。因為 B+ 樹索引在時間和空間上都有開銷,所以書中提出了具體的建議,包括只為用于搜索、排序或分組的列創(chuàng)建索引、索引列的類型盡量小、盡量使用覆蓋索引進(jìn)行查詢等。 有了關(guān)于數(shù)據(jù)頁結(jié)構(gòu)與 B+ 樹索引的知識,就可以深入講解查詢優(yōu)化技術(shù)了。從基于成本的優(yōu)化到基于規(guī)則的優(yōu)化,還說明了 EXPLAIN 與 optimizer trace 工具輔助分析查詢優(yōu)化的方法。掌握了這些妙招,相信做開發(fā)的朋友再也不會對如何優(yōu)化慢查詢感到無從下手了。本書還對 InnoDB 的 Redo、Undo、鎖等重要議題進(jìn)行了同樣細(xì)致入微的說明。把這本書啃透,無論是程序員、運維還是 DBA,以后再遇到 MySQL 相關(guān)的任何問題,都必定能一眼看穿本質(zhì),難題在談笑間就迎刃而解了。
04結(jié)語
要特別說一下《MySQL是怎樣使用的:快速入門 MySQL》和《MySQL是怎樣運行的:從根兒上理解MySQL》這兩本書的作者——“小孩子4919”,他是一位對技術(shù)抱有極大熱情的程序員。 為了寫這兩本書,他甚至辭職潛心創(chuàng)作,從書中原創(chuàng)內(nèi)容的細(xì)節(jié)可以看出來,這兩本書是傾注了大量心血才寫成的。這是一名技術(shù)人最純粹的分享,相信也會有更多技術(shù)人因為這兩本書而獲得更好的發(fā)展。 在職業(yè)生涯的發(fā)展上,技術(shù)人總有一天會走上更高的崗位,接受更難的挑戰(zhàn)。當(dāng)那一天到來時,你在設(shè)計系統(tǒng)架構(gòu)或者部署高可用集群時,就可以通過對 MySQL的透徹理解自信地完成工作。 最后,希望你也成為一名愿意積極分享的技術(shù)人。—END—
說說你對 MySQL 的看法?
在本文末留言,可以說說你想要哪本書或者你對MySQL的認(rèn)識。留言點贊排名前三的讀者將每人獲贈一本新書,任挑一本包郵到家!截止時間8月7日十點半。
