深入MySQL(一) MySQL的組織架構

2022-09-17 13:39:21 字數 1721 閱讀 5828

今天開始將自己所學過的mysql的知識都嘗試融會貫通,並且用寫部落格的方式記錄分享下來。

今天講的主題是mysql的組織架構,對於學習乙個中介軟體或者開源專案而言,我覺得最重要的便是先知曉其組織架構,以乙個全域性的姿態去觀察架構之後,再有選擇性的深入到細節,才能夠學的快且有收穫。

根據圖可以觀察到,mysql主要是分為server層與儲存引擎層兩大塊;而客戶端的含義非常廣泛,理論上只要可以連線到mysql,就能夠算上是乙個客戶端;我們主要討論mysql架構中的server層與儲存引擎層。

server層可以看做是將mysql的共性操作,也就是所有跨儲存引擎的操作都放到了這一層進行實現,比如查詢、解析、優化、快取以及所有的內建函式、儲存過程、檢視、觸發器

聯結器的作用主要是判斷使用者是否可以利用某個賬號登入mysql,其中比較有意思的一點是一旦利用某個賬號登入上去mysql之後,它本次連線的許可權便固定了,如果要讓修改許可權操作生效,那麼便需要將本次連線重新連線,這樣才會是新的許可權。

查詢快取的作用是便是快取一些熱點查詢的結果集,然後直接返回。它有很多很多的缺陷,它的實現是利用乙個雜湊表,將sql語句的hash對應結果集。

查詢快取的缺陷很明顯,主要為兩個地方:

對映的key是sql語句的hash值,只要與key的查詢有任何不一致的地方,都會查詢快取失敗。

一旦進行更新,會直接清空快取表。

這個功能太過於雞肋,所以直接在8.0中去除,後續也不會再提及。

解析器的作用是解析sql語句,利用詞法分析、語法分析檢查sql語句是否存在語法錯誤的情況。

優化器的作用便是對sql語句進行優化,比如索引的選取,連線的順序等,具體的如何優化在後續的篇章裡會介紹;

執行器的作用是生成執行計畫,然後呼叫儲存引擎的介面,進行資料的操作。

以上便是server層的大致內容,總的來說,server層便是由連線、解析、優化、執行四個部分組成,mysql的架構將解析與獲取資料拆開,也為後續的一些特性的實現提供了基礎。

儲存引擎層的操作主要負責的是資料的儲存與讀取,不同的儲存引擎有不同的特性,現在應用最多的儲存引擎是innodb,現在已經是mysql的預設儲存引擎;而在早起的版本中,mysql的預設儲存引擎為myisam,後期我們也會有關於這兩個儲存引擎的比較。

我們所熟知的事務、行鎖、多版本併發控制、事務日誌都是由儲存引擎層實現的,而上述的這些內容,innodb儲存引擎是都支援的,所以mysql官方後續將其設立為了預設引擎。

儲存引擎它底層由數十個底層函式,而server層是執行器利用組合這些函式來達到讀取資料的能力,我比較喜歡把這個過程稱為「樂高積木」。

mysql的基礎架構為其後續的細節實現提供了基礎,server層的內容我們後續比較重要的內容是優化器如何進行優化;儲存引擎層的內容,我們主要學習innodb的特性以及在某些條件下,使用其他儲存引擎的便利性。

mysql的成功,與其基礎架構具有很大的關聯性,在oracle霸佔市場的年代,憑藉複製所擴充套件出來的橫向擴充套件功能讓其在資料庫市場下獨佔一角;後續又通過innodb的出現,優化補充了很多老版本所出現的問題。所以希望各位讀者能夠根據自己之前的所學,結合這篇文章,對於mysql的基礎架構能夠有新的認識。

mysql 深入優化 Mysql的深入優化

ok,廢話不多說,上乾貨。調優思路 0.硬體優化 1.資料庫設計與規劃 以後再修改很麻煩,估計資料量,使用什麼儲存引擎 2.資料的應用 怎樣取資料,sql 語句的優化 3.磁碟 io 優化 4.mysql 服務優化 記憶體的使用,磁碟的使用 5.my.cnf 內引數的優化。0.硬體優化 cpu 64...

深入學習mysql 一

相信很多人都說過一句玩笑話,刪庫跑路哈哈哈 說到刪庫跑路,那麼你是否了解過,如何給mysql設定許可權來防止這樣的事情發生呢 如果你使用的是root許可權的賬號,你需要給不同的賬號來分配許可權時,可以使用如下的sql語句來建立對應的賬號和許可權 grant select on practice.to...

mysql查詢深入 Mysql查詢 深入學習

1 開篇 在學習的過程中我們一起進步,成長。有什麼寫的不對的還望可以指出。2 查詢 1 多表之間的查詢 笛卡爾積 100 100 10000 查詢的資料量可能非常大 給表名取別名 2 關聯查詢 隱示內連線查詢。sql92 內連線查詢。sql99 left join on 如果我寫 left join...