
我買的是第二版的,這本書主要是以 Mysql 5 做的一些解讀。
在此之前,我了解關(guān)于 Mysql 優(yōu)化方面知識(shí)的渠道都是來自于一些博客,視頻,這次打算系統(tǒng)性的學(xué)習(xí)了解 Mysql 的各方面知識(shí)。
第一章的名稱為 Mysql 架構(gòu)。
第一章主要談的有這么幾點(diǎn),都是粗略的談了一下。
- 邏輯架構(gòu)
- 并發(fā)控制與鎖
- 事務(wù)與隔離級(jí)別
- 多版本并發(fā)控制
- Mysql 中的各種常見引擎
邏輯架構(gòu)
在本書中,談到的邏輯架構(gòu)分為了三層 (由上至下)。
- 客戶端層
- 核心層
- 存儲(chǔ)引擎層
這三層跟我以前學(xué)到的有些不一樣。之前學(xué)到的也是分為三層,第一層一樣都是客戶端層。
第二層是數(shù)據(jù)庫管理引擎層,第三層為數(shù)據(jù)層。
顯然之前學(xué)的是那位老師為了讓視頻更簡(jiǎn)單易懂,將核心層和存儲(chǔ)引擎層放到了一起。
但實(shí)際上,根據(jù)我從書中所了解到的,如果要更專業(yè)的劃分架構(gòu)層,當(dāng)然是核心層要和引擎層分開,因?yàn)樗麄冇植煌墓δ?,在?shí)際架構(gòu)中他們也是分層處理的(在這里我覺得還可以加個(gè)數(shù)據(jù)層,它存在于我們的磁盤或者內(nèi)存中)。
在這里客戶端層主要負(fù)責(zé)連接,授權(quán)認(rèn)證,安全等處理。
第二層核心層,它包含了 Mysql 的大多數(shù)核心內(nèi)容,查詢解析,分析,優(yōu)化,緩存等內(nèi)置函數(shù)都在這一層中完成。
存儲(chǔ)引擎鎖提供的功能也集中在這一層,例如存儲(chǔ)過程,觸發(fā)器,視圖等。
第三層包含了存儲(chǔ)引擎。負(fù)責(zé)提取和存儲(chǔ)數(shù)據(jù)。服務(wù)器通過存儲(chǔ)引擎 API 與引擎進(jìn)行交互。這個(gè) API 隱藏了存儲(chǔ)引擎直接的區(qū)別,使得他們?cè)诓樵儗邮峭该鞯摹?/p>
除了 Innodb 外,該層不會(huì)進(jìn)行 SQL 解析,也不會(huì)互相通訊,只是簡(jiǎn)單的響應(yīng)服務(wù)器請(qǐng)求( Innodb 會(huì)解析外鍵定義,因?yàn)?Mysql 自身沒有實(shí)現(xiàn)它,)。
根據(jù)書中述描,我們能得知,是服務(wù)器是與第三層存儲(chǔ)引擎進(jìn)行通訊,那我就奇怪了,書中并沒有說服務(wù)器層,在邏輯圖中也沒有提到,甚至在邏輯圖中,第一層與第二層是有箭頭指向的,而第二層與第三層沒有箭頭指向。在這里我是疑惑的。
于是我在搜索引擎中查詢了一番,在很多人的博客中,他們給第二層與第三層中加了個(gè)箭頭,也就意味著,書中所述的服務(wù)器就是第二層?在他們的博客中,第二層還有個(gè)玩意,叫查詢執(zhí)行引擎,正是這個(gè)引擎與與存儲(chǔ)引擎發(fā)生交互的。
到底是怎樣,還是得看后面書中有沒有更多的解釋了,現(xiàn)在還不能下斷論,但是為了更好的閱讀與學(xué)習(xí),我在這里還是假設(shè)別人博客里所畫的那幅圖,是正確。
優(yōu)化與執(zhí)行
Mysql 會(huì)在第二層解析查詢語句,并創(chuàng)建一個(gè)內(nèi)部數(shù)據(jù)結(jié)構(gòu)(解析樹),然后對(duì)其進(jìn)行各種優(yōu)化。其中包括重寫查詢,決定查詢的讀表順序,以及選擇索引。
用戶可以通過指令影響他的優(yōu)化策略,也能要求服務(wù)器給出優(yōu)化過程說明。
書中描述到,優(yōu)化器并不關(guān)心某個(gè)表使用哪種存儲(chǔ)引擎(因?yàn)榈谌龑訉?duì)于第二層來說是個(gè)黑盒,用API進(jìn)行通訊)。但是,存儲(chǔ)引擎又對(duì)第二層的優(yōu)化過程存在影響,所以,第二層的優(yōu)化器會(huì)請(qǐng)求第三層,為某種具體操作提供性能與開銷方面的信息和表內(nèi)數(shù)據(jù)統(tǒng)計(jì)信息。
例如,某些引擎可以支持對(duì)某類查詢更有利的索引類型,后面能夠了解更多。
根據(jù)以往的知識(shí),能夠了解到,重復(fù)向 Mysql 發(fā)出兩次查詢指令,第二條查詢速度會(huì)飛快。這是因?yàn)镸ysql緩存了上次的查詢結(jié)果和語句。
根據(jù)本節(jié)內(nèi)容可以得知,正是第二層的緩存功能發(fā)揮了作用。由此也可以得知,如果緩存成功,將會(huì)減少哪些操作呢?
第一,當(dāng)然是不用去第三層操作數(shù)據(jù)了,即減少了磁盤 IO 。第二,也不會(huì)再生成解析書了,沒有解析書,當(dāng)然也就不會(huì)再有優(yōu)化了。而不用優(yōu)化,當(dāng)然也不用第二層與第三層再次進(jìn)行通訊獲取優(yōu)化信息了。
以上為第一章節(jié)的Mysql的邏輯架構(gòu)粗解。