mysql優化是java面試中的重點項目,幾乎在每一場java面試中都會被問到一些和mysql優化相關的題,所以從今天起老師想和大家分享一套mysql的優化課程,也許有些同學會納悶,mysql的優化課程為什么開篇就講【MySQL的架構體系】呢?我們見到了太多單純講優化經驗的文章,這些文章中提到的技巧確實能解決一些燃眉之急,可是優化過后,我們是否真的理解了為什么要這樣優化呢?掌握MySQL的結構體系,能夠讓我們知其然,又能知其所以然。 以下引用了一位大神的話,和大家共勉。
看一個事兒千萬不要直接陷入細節里,你應該先鳥瞰其全貌,這樣能夠幫助你從高維度理解問題
一. MYSQL的架構體系圖
首先老師手繪了一張MySQL的體系架構圖,讓同學們對完整的MySQL體系架構有一個整體認識
二. 分層介紹各模塊的作用
從上圖中我們可以很清楚的發現MySQL的體系架構分為:服務層,引擎層,存儲層 三層。
接下來老師將大致介紹每一層的作用,為我們日后學習MySQL優化筑基。
2.1 服務層
連接池:主要負責用戶連接上mysql服務器的工作。
用戶名和密碼的認證;
權限的控制;
線程的重用和限制,可以起到保護數據庫服務器不至于被海量的連接拖垮,造成OOM。
查詢緩存: 提升查詢效率。
緩存的數據以 key-value的形式保存,key就是查詢語句;
由于數據頻繁失效弊大于利,MySQL8.0已經把這一塊廢棄;
解析器: 對sql命令做解析。
語法分析: 分析sql語法是否正確。
詞法分析: 識別出sql語句的表名 列名,視圖等。
優化器:sql語句執行前進行優化 包括【索引選擇,join順序調整等】。
執行器:操作引擎,返回結果。
2.2 引擎層
存儲引擎概念就是指 mysql數據文件的存儲方式包含【存儲機制,索引和鎖的水平】等信息
MySQL支持多種存儲引擎(數據存儲方式)包含【InnoDB、MyISAM、Memory】等。
MySQL的核心就是存儲引擎。
2.3 物理文件存儲層
存儲層主要存儲系統的物理文件,并完成和引擎層的交互。
物理文件包含以下三類:
日志文件:包含對數據做修改的 Binary log 和記錄慢查詢的 Slow Query log
數據文件:包含表結構定義文件,數據文件,索引文件等
系統配置文件: 包含/etc/my.cnf等
四. 結語
正確的了解MySQL的體系結構之后,那么恭喜各位同學,我們已經為學習MySQL優化順利筑基了。