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