如何學習MySQL,這幾本書初學者必看!

来源:https://www.cnblogs.com/ninedata/archive/2023/03/08/17192287.html
-Advertisement-
Play Games

《高性能MySQL》第四版發佈後,收到了很多讀者的反饋,其中關註最多的是作為一個初學者,應該如何能夠較為系統的學習MySQL,從而應對日常工作或者獲得更好的職業發展。於是和多個業內朋友討論後,整理了一些MySQL學習的推薦資源,供初學者參考。 本文分成幾部分,包括業界專家的經驗、推薦書籍、視頻/音頻 ...


《高性能MySQL》第四版發佈後,收到了很多讀者的反饋,其中關註最多的是作為一個初學者,應該如何能夠較為系統的學習MySQL,從而應對日常工作或者獲得更好的職業發展。於是和多個業內朋友討論後,整理了一些MySQL學習的推薦資源,供初學者參考。

本文分成幾部分,包括業界專家的經驗、推薦書籍、視頻/音頻資源、其他資源或者學習方式、MySQL學習溝通群、抽獎贈書等。

業界專家的經驗

阿裡雲的資料庫專家 Yangyidba

提問:剛剛入行時,有哪些資料給你了幫助?

正式接觸 MySQL 是2011年底,當時的公司的資料庫版本主要是 5.5 版本和少量 5.1 版本。因為之前學Oracle的經驗是查看官方文檔,學習MySQL 資料主要是 “官方文檔” 和當時的淘寶DBA團隊組織的技術大學的技術分享,學習MySQL技術的技術特性和經典案例。

其實就現在而言,MySQL 官方文檔依然是最好的學習資料和教材, 裡面非常詳細的說明 MySQL的基礎架構,redo,undo,讀寫邏輯,欄位類型,鎖,存儲引擎,主從複製,MGR ,性能優化等等。把官方文檔通讀一遍,基本上能超越60-70%左右的DBA,為什麼不是更高呢?因為學習技術是為了使用技能。

提問:進一步瞭解 MySQL/資料庫,哪些資料給了你幫助?

換個回答的方式,哪些因素幫助我提升資料庫技能水平?總結起來大概三個方面:

  1. 掌握基礎知識之後,會有 “紙上來得終覺淺,絕知此事要躬行”” 的想法。基於對各種MySQL 技術知識點和 功能特性的理解,搭建單節點,主備模式環境 做各種功能測試,並且將知識點的驗證或者分析過程下來寫博客,比如死鎖,能將常見的20個死鎖常見分析過程總結下來,相信死鎖問題再也難不倒你了。

  2. 如果是第一條是模擬考,那麼真實的業務場景則是實戰演練,在海量的業務場景下,層出不窮的業務問題和技術難點驅動 DBA 對 資料庫的使用和限制瞭解的更多。比如:

  • truncat表 如何恢復?
  • 如果有500g binlog,如何加速 binlog 應用?
  • 如何刪除3T的大表?
  • 秒殺場景下資料庫設計和優化?
  • 如何排查業務訪問db RT異常?
  • 為什麼業務寫完立即查詢當時查不到?
  1. 和優秀的同事或者優秀的人同行,比如有解決不了的疑惑可以咨詢內核開發。

提問:現在回頭來看,哪些資料你覺得是最推薦的,分別對於初入學,和深入學習的人來說?

對於初學者而言,首要目標是 夯實基礎,學好基礎/理論知識。

  1. 官方文檔
  2. 《高性能MySQL》
  3. 《MySQL性能調優與架構設計》
  4. 《MySQL技術內幕:InnoDB存儲引擎》

對於深入學習的人來說, 單獨的資料庫學習是沒有意義的,必須服務好具體的業務場景才能發揮其價值。推薦:

  1. 《數據密集型應用系統設計》
  2. 《性能之巔》
  3. 《漫畫演算法》

學習和總結各種業務場景下的資料庫架構設計 ,資料庫高可用,容災,強紅包,秒殺,直播彈幕等等。

匿名大佬 數年前就是阿裡P9

對於初學者,建議自己手動安裝常見的架構,比如最簡單的一主一備,作為驗證環境。找一些操作案例較多的博客或公眾號文章,照著作者的思路執行。

然後再自己設計一些執行案例,先自己推導結果,再執行驗證,在驗證過程中加深理解或者勘誤。

內核學習也可以延用這個方法,在驗證過程中設想如果是自己實現這個功能的,會怎麼寫,然後通過閱讀源碼理解作者的設計思路。就是看源碼要帶著問題去看,找只要主要流程,GDB去調試單步執行。

阿裡集團DBA團隊 Leader 某陳姓大佬

推薦的重要學習資料包括:

  • MySQL 官方文檔
  • 《MySQL 技術內幕:InnoDB 存儲引擎》
  • MySQL 周邊組件的文檔與源碼,如percona toolkit、MHA等
  • 初學者:丁奇 45 講、MySQL 官方文檔

深入學習:主要還是積累、排錯,雲資料庫相關還是需要看下技術相關的論文。

推薦書籍與資源

MySQL作為當前最流行的關係型資料庫,相關的書籍也非常多,這裡羅列基本推薦如下:

MySQL相關的書籍

文檔是最全面和權威的參考,而其他三本都是,根據豆瓣網友打分進行推薦的。第一本《MySQL是怎樣運行的》適用於完全的初學者,內容由淺到深。第二本《高性能MySQL》則從“優化”為入口,非常系統介紹了MySQL的架構、優化,是一本非常好的進階書籍。第三本是《MySQL技術內幕 InnoDB存儲引擎》,這本書深入的介紹了MySQL核心組件InnoDB存儲引擎,涵蓋了資料庫的事務原理、調度、物理存儲、鎖等知識。

另外,其實MySQL領域還有很多書籍偏重各有不同,這裡不一一推薦了。

1、《MySQL是怎樣運行的》

這本書於2020年出版,是一本比較新的書籍,整個書籍也是圍繞其標題展開《MySQL是怎樣運行的:從根兒上理解 MySQL》。這本書最大的特點是,全書有非常清晰的脈絡,可以說是由“入門到精通”,書中放棄了一定的完整性(這個可以去看MySQL文檔),而是非常接地氣的從零開始,用了很多形象的比喻介紹MySQL資料庫的各個概念。

同時,該書籍在每個章節對相關的概念也都進入了非常深入的討論,例如,關於索引的介紹,從什麼事索引、索引的物理結構開始介紹,然後,開始介紹MySQL的索引在查詢、排序等場景的使用,最後,再介紹一些常見的索引優化技巧,包括普通索引、首碼索引、覆蓋索引等。

總得來說,這本書是最近幾年,面向於初學者非常不錯的一本書。

2、《高性能MySQL》

《高性能MySQL》則從“優化”為入口,將MySQL相關的知識點聚合在一起,包括了查詢性能優化(SQL優化)、高性能索引、庫表結構(Schema)優化等,也包括了伺服器配置(硬體和軟體)優化、架構優化(包括了複製、只讀節點、分片)等,還介紹了部分雲服務商的MySQL等內容,是一本非常適合進階閱讀的書籍。

該書籍的作者、譯者,也都是一直活躍在資料庫領域第一線的資料庫開發者,對於MySQL實踐有著非常豐富經驗。這也保障概書籍整體質量不錯,不僅可以作為系統的閱讀使用,也可以作為一個參考手冊,可以根據自己工作需要,不定期的翻閱其中的部分章節。

3、《MySQL技術內幕 InnoDB存儲引擎》

這本書則以InnoDB為切入點,非常深入的介紹了InnoDB或者說資料庫的原理。InnoDB可以說是MySQL最為核心的組件,其原理不僅僅適用於MySQL,也幾乎適用於大多數關係型資料庫系統。

具體的,概書籍覆蓋的內容包括了MySQL/InnoDB物理存儲結構、索引、鎖、事務等等。本書底層原理為出發點,幫助開發者理解MySQL行為、特點。

本書非常適合,對MySQL已經有一定程度瞭解,又希望更加深入瞭解其底層實現原理的人,或者是工作中需要對MySQL源碼層進行修改或者定製的資料庫內核開發者。

4、用好MySQL官方文檔

MySQL官方文檔可以說是最為權威、更新最為及時、質量也應該是最高的MySQL學習資料了。在早期,市面上還沒有那麼書籍的時候,我個人也是通過精讀MySQL官方文檔,以此為深入學習MySQL、甚至是深入學習資料庫原理的知識庫。

但是,官方文檔為了保證完整性、準確性,會導致其看起來非常冗長、繁瑣,有時候則感覺是在隔靴撓癢,偏向於介紹實現方式或原理以及MySQL提供的功能,而不會介紹讀者最需要的最佳實踐。例如,官方文檔會詳細介紹每個欄位類型和參數詳情,但是不會告訴你,哪些欄位類型應該多用,哪些欄位類型應該少用。

瞭解了官方文檔的這些特性之後,官方文檔閱讀的幾個要點總結如下:

  1. 在閱讀MySQL官方文檔之前,需要先花些時間瞭解文檔的整體架構,方便後續閱讀查閱;
  2. 在需要瞭解某個具體MySQL知識點時,建議可以精讀MySQL文檔;
  3. 如果希望系統的瞭解某個MySQL特效的時候,可以完整的閱讀;
  4. MySQL文檔MySQL官方文檔最新的都是英文的,需要有一定的英文閱讀能力。

總得來說,多閱讀官方文檔,雖然剛開始會覺得有些晦澀,堅持下來,你會發現收穫巨大。

另外,閱讀官方文檔也要註意:也正是因為官方文檔註重保障完整性、準確性,所以必定會繁瑣、冗長,而不怎麼介紹最佳實踐經驗,甚至一些主流的應用等,例如官方文檔也只會將內容限定在MySQL本身,而不會包括硬體、軟體或者雲環境的相關的內容。

5、視頻/音頻資源

現在也越來越多的人通過視頻的方式去線上的學習各類知識,B站上也有一些面相MySQL初學者的視頻資源,質量我不太好評價,不過作為文字、書籍的補充學習,看一些視頻學習還是非常不錯的。大家可以去B站搜索一下“MySQL 初學者”就有很多的相關視頻了,質量良莠不齊,需要大家自己甄別適合自己的。這裡僅推薦一下由極客時間推出的《MySQL實戰45講》。

《MySQL實戰45講》

該系列價格也非常便宜,可以說是買不了吃虧、買不了上當,反倒是容易買到自己不能全部看完/聽完的懊惱:《MySQL實戰45講》。

其他資源或者學習方式

1、使用Google/Baidu或者ChatGPT

通常,對於某個非常具體的知識點或者行業/場景最佳實踐,在文檔中都不會覆蓋,但是,因為MySQL的用戶量極大,在互聯網上也有非常多的分享和討論,從初階到高階,面相各個級別的內容都有,可以說是一個大寶庫,用好了也是可以事半功倍的。

2、多總結、多分享、多交流

學習本身通常都是無趣的,如果學習的知識不能夠很快的在實際工作中使用,也很容易忘記。另一個非常好的學習方法,不僅僅限於學習MySQL,就是分享很總結。一方面,可以讓你系統的把一個知識點瞭解的比較完整和透徹,也可以幫你更好的記錄,大大加深理解與記憶。

3、學以致用

也許你學習MySQL的原因可能只是因為面試、解決一個工作中的問題、增長知識或者只是興趣,無論是哪個原因促使你學習,動手練習併在工作中使用這些知識,都是非常有效的。如果,你對MySQL或者資料庫很有興趣,那麼則建議在當前的公司,找一個與資料庫更近的崗位工作,這樣自然可以事半功倍。

4、MySQL源代碼

MySQL是一個開源資料庫,另一個獨天得厚的資源是MySQL源代碼。不過,MySQL發展的時間已經非常長了,其代碼複雜度也比較高,可以考慮從一兩個小的模塊、小的功能點著手,去學習、驗證。

5、學術論文

當如果需要瞭解某個具體模塊的來龍去脈以及設計思想的時候,有時候去查找一些經典的資料庫領域論文可以很好的幫助你解決相關的疑問。有一套大部頭《Readings in Database Systems》可以作為參考或者開始,不過內容較多,需要花費大量時間,總得來說不太適合初學者。

小結

對於不同基礎的人,學習的重點和方法是各有不同的,所以本文會列舉主要的MySQL資料庫的學習資源和方法,讀者需要結合自己的實際情況選擇合適的方法。如果你有好的經驗分享,可以在留言評論談談你的經驗。

orczhou 是《高性能MySQL》的書籍的譯者,同時也是來自 NineData(www.ninedata.cloud)的工程師。NineData 向企業、開發者提供高效、安全的資料庫 SQL 開發、資料庫備份、數據複製/遷移/集成、數據對比等功能,是一個 SaaS 服務開箱即用,可以快速提升企業 SQL 開發效率,保障企業數據安全。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一、下載安裝兩個版本的JDK 官網下載地址:Java Downloads | Oracle 下載安裝成功後,安裝路徑E:\Java\上 JDK8 有兩個包一個jdk1.8.0_231,一個jre1.8.0_231。JDK17只有一個jdk-17.0.5 二、JDK的環境配置 切換環境變數 在系統變數 ...
  • Liunx Vim常用命令 1、打開命令: vi / vim + filename(文件名) 2、退出命令: 強制退出不保存修改的內容 :q! 退出並且保存修改的內容 :wq 強制保存修改的內容然後退出(修改了只讀文件會用到) :wq! 註意:輸入法需要改為英文,中文不生效! 3、游標移動命令 個人 ...
  • 前言 說實話在寫這篇文章的時候,鹹魚不禁又想起了那件男默女淚的往事 我喜歡做筆記,我覺得好記性不如爛筆頭,所以在我的學生以及職業生涯階段,我用過四款筆記應用——Onenote、語雀、印象筆記、Typora 其中我個人覺得體驗最好的非 Typora 莫屬了 ​ 在 2022 年的時候,由於 Typor ...
  • 系統增強工具PowerToys 下載地址:https://github.com/microsoft/PowerToys 什麼是 Windows 系統中,最好的輔助工具? PowerToys 一定可以獲得提名。PowerToys 是一款來自微軟的系統增強工具,就像是一個神奇的系統外掛,整套軟體由若幹子 ...
  • 通用表表達式 通用表表達式(Common Table Expression、CTE)是一個臨時的查詢結果或者臨時表,可以 在其他 SELECT、INSERT、UPDATE 以及 DELETE 語句中使用。通用表表達式只在當前語句中 有效,類似於子查詢。 使用 CTE 的主要好處包括: 提高複雜查詢的 ...
  • 一、Redis簡介 Redis全稱為 Remote Dictionary Server(遠程詞典服務),開源(BSD許可)的,使用 C 語言開發的。 Redis是記憶體中的數據結構存儲系統,它可以用作資料庫、緩存和消息中間件。 支持多種類型的數據結構,如 字元串(strings), 散列(hashes ...
  • MySQL查看資料庫性能常用命令 # 列出MySQL伺服器運行各種狀態值 show global status; # 查詢MySQL伺服器配置信息語句 show variables; # 慢查詢 show variables like '%slow%'; # MySQL伺服器最大連接數 show v ...
  • 摘要:Bucket存儲是數據共用中重要的一環,當前階段,bucket存儲可以將列存中的CU數據和DN節點解綁。 本文分享自華為雲社區《存算分離之bucket表——【玩轉PB級數倉GaussDB(DWS)】》,作者:yd_278301229 。 在雲原生環境,用戶可以自由配置cup型號、記憶體、磁碟、帶 ...
一周排行
    -Advertisement-
    Play Games
  • Timer是什麼 Timer 是一種用於創建定期粒度行為的機制。 與標準的 .NET System.Threading.Timer 類相似,Orleans 的 Timer 允許在一段時間後執行特定的操作,或者在特定的時間間隔內重覆執行操作。 它在分散式系統中具有重要作用,特別是在處理需要周期性執行的 ...
  • 前言 相信很多做WPF開發的小伙伴都遇到過表格類的需求,雖然現有的Grid控制項也能實現,但是使用起來的體驗感並不好,比如要實現一個Excel中的表格效果,估計你能想到的第一個方法就是套Border控制項,用這種方法你需要控制每個Border的邊框,並且在一堆Bordr中找到Grid.Row,Grid. ...
  • .NET C#程式啟動閃退,目錄導致的問題 這是第2次踩這個坑了,很小的編程細節,容易忽略,所以寫個博客,分享給大家。 1.第一次坑:是windows 系統把程式運行成服務,找不到配置文件,原因是以服務運行它的工作目錄是在C:\Windows\System32 2.本次坑:WPF桌面程式通過註冊表設 ...
  • 在分散式系統中,數據的持久化是至關重要的一環。 Orleans 7 引入了強大的持久化功能,使得在分散式環境下管理數據變得更加輕鬆和可靠。 本文將介紹什麼是 Orleans 7 的持久化,如何設置它以及相應的代碼示例。 什麼是 Orleans 7 的持久化? Orleans 7 的持久化是指將 Or ...
  • 前言 .NET Feature Management 是一個用於管理應用程式功能的庫,它可以幫助開發人員在應用程式中輕鬆地添加、移除和管理功能。使用 Feature Management,開發人員可以根據不同用戶、環境或其他條件來動態地控制應用程式中的功能。這使得開發人員可以更靈活地管理應用程式的功 ...
  • 在 WPF 應用程式中,拖放操作是實現用戶交互的重要組成部分。通過拖放操作,用戶可以輕鬆地將數據從一個位置移動到另一個位置,或者將控制項從一個容器移動到另一個容器。然而,WPF 中預設的拖放操作可能並不是那麼好用。為瞭解決這個問題,我們可以自定義一個 Panel 來實現更簡單的拖拽操作。 自定義 Pa ...
  • 在實際使用中,由於涉及到不同編程語言之間互相調用,導致C++ 中的OpenCV與C#中的OpenCvSharp 圖像數據在不同編程語言之間難以有效傳遞。在本文中我們將結合OpenCvSharp源碼實現原理,探究兩種數據之間的通信方式。 ...
  • 一、前言 這是一篇搭建許可權管理系統的系列文章。 隨著網路的發展,信息安全對應任何企業來說都越發的重要,而本系列文章將和大家一起一步一步搭建一個全新的許可權管理系統。 說明:由於搭建一個全新的項目過於繁瑣,所有作者將挑選核心代碼和核心思路進行分享。 二、技術選擇 三、開始設計 1、自主搭建vue前端和. ...
  • Csharper中的表達式樹 這節課來瞭解一下表示式樹是什麼? 在C#中,表達式樹是一種數據結構,它可以表示一些代碼塊,如Lambda表達式或查詢表達式。表達式樹使你能夠查看和操作數據,就像你可以查看和操作代碼一樣。它們通常用於創建動態查詢和解析表達式。 一、認識表達式樹 為什麼要這樣說?它和委托有 ...
  • 在使用Django等框架來操作MySQL時,實際上底層還是通過Python來操作的,首先需要安裝一個驅動程式,在Python3中,驅動程式有多種選擇,比如有pymysql以及mysqlclient等。使用pip命令安裝mysqlclient失敗應如何解決? 安裝的python版本說明 機器同時安裝了 ...