【漫畫】看完他們的聊天,你就理解了MySql的架構

原創: 享學講師Deer
轉載請聲明出處!

select * from tabl1 where id = 1;

連接層

SQL處理層

所謂跨存儲引擎就是說每個引擎都需提供的功能(引擎需對外提供接口)。

執行以上功能的操作例如:存儲過程、觸發器、視圖等。

還是分步驟來看吧:

1.如果是查詢語句(select語句),首先會查詢緩存是否已有相應結果,有則返回結果,無則進行下一步(如果不是查詢語句,同樣調到下一步);

2.解析查詢,創建一個內部數據結構(解析樹),這個解析樹主要用來SQL語句的語義與語法解析;

3.優化:優化SQL語句,例如重寫查詢,決定表的讀取順序,以及選擇需要的索引等。這一階段用戶是可以查詢的,查詢服務器優化器是如何進行優化的,便於用戶重構查詢和修改相關配置,達到最優化。

這一階段還涉及到存儲引擎,優化器會詢問存儲引擎,比如某個操作的開銷信息、是否對特定索引有查詢優化等。

存儲引擎層

最終的數據還是落在存儲層,而在mysql中存儲層是有各種存儲引擎的,有存儲引擎來負責數據的存儲和提取。

再來看下這圖,存儲引擎在mysql中不只一個,爲了方便切換,其架構是插件式的,類似於設計模式裏面的適配器模式,雖然上面看到有很多的存儲引擎,但用得最多的還是InnoDb,它從MySql 5.5.5版本開始已經成爲了默認的存儲引擎。

當然,存儲引擎不只有Innodb,還有其他常見的存儲引擎,比如說:

MyIsam:5.5之前默認的存儲引擎,支持表壓縮,只支持表鎖,如果非事務性的查詢可以考慮使用。

Innodb:mysql默認的存儲引擎,支持行鎖,唯一支持事務的存儲引擎。

CSV:以csv格式進行存儲,索引列都不能爲null,不支持索引,可以對數據文件直接變更。

Archive:會使用zlib方式對數據進行壓縮,但只支持insert 與select,只能在id上創建索引。

Ferderated:默認不開啓,需要修改配置文件開啓,提供遠程訪問其他服務器上面的表的功能,本地不存放數據。

喜歡本文?快到下方評論點贊關注吧~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章