1. 程式人生 > 實用技巧 >MySQL之架構簡單分析

MySQL之架構簡單分析

上圖為MySQL的簡易架構圖,給您有一個大概的概念,下面我將為您進行進一步的分析。

聯結器:

當連線MySQL資料庫時,等待的將是MySQL服務端的聯結器;聯結器的職責是和客戶端建立連線、獲取許可權、維持和管理連線。客戶端連線命令一般是如下所示(建議:不要在命令中顯示新增登入密碼):

mysql -h$ip -p$port -u$user -p$password

查詢快取:

建立完連線後,就可執行select語句。執行就會走向查詢快取。

MySQL拿到這個查詢請求後,就會先到快取中看看,之前是不是執行了該語句。在查詢快取中資料是以key-value形式存在的,key為執行的查詢請求,value為查詢結果。如果執行了就直接從快取中把結果返回給客戶端,請求結束。如果語句不在快取中,就執行後續複雜操作。

在大多數情況下不建議使用查詢快取,為什麼呢?因為查詢快取往往弊大於利。

查詢快取的失效非常頻繁,只要對錶進行了更新,該表的中查詢快取全部清除。所以往往很多時候,快取還沒使用就被清除了。對於更新壓力很大的資料庫來說,查詢快取的命中率很低。如果你的業務中存在一張靜態表,很長時間才會更新一次。比如,系統配置表,那這張表的查詢才適合查詢快取。

該功能是自動配置的。可以將引數 query_cache_type 設定成 DEMAND ,這樣對於預設的SQL語句就不會使用查詢快取。而對於確定的查詢語句,可以使用 SQL_CACHE 顯示指定,比如如下語句:

select SQL_CACHE * from
t where id = 1;

注意:在MySQL8.0之後的版本,把查詢快取模組移除了。

分析器

在沒有命中查詢快取後,MySQL開始真正執行語句了。這時MySQL對該語句進行解析。

分析器首先進行詞法分析,一條sql由多個字串和空格組成,MySQL需要分析出這些字串是什麼,代表什麼。

做完識別之後,進行語法分析。根據詞法分析的結果,語法分析器會根據語法規則對sql語句進行分析,是否符合MySQL的語法規則。

優化器

執行完分析器後,MySQL就知道該sql語句要幹什麼了。在開始執行之前,要經過優化器的處理。

優化器在表裡存在多個索引時,選擇執行哪個索引;或者一個語句有多表關聯時(join),選擇各表的連線順序。

執行器

MySQL通過分析器知道了該語句要做什麼,通過優化器知道該怎麼做,於是進入到了執行器階段,開始執行語句。

開始執行之前,首先會判斷使用者是否有對錶的執行許可權(如果是在查詢快取得到結果,會在返回結果之前進行許可權校驗),如果沒有會報錯.。如果有許可權,就開啟表繼續執行語句。開啟表的時候,執行器會根據表的引擎定義,去使用引擎提供的介面。

儲存引擎

MySQL區別於其他資料的最具有點的是儲存引擎介面模組,MySQL可進行插拔儲存引擎。

MySQL的儲存引擎有很多種,比如:InnoDB、MyISAM、ISAM、Memory等。在MySQL5.6之前,預設儲存引擎是MyISAM,而在該版本之後預設的是InnoDB。下表是兩者之前的區別:

InnoDB

MyISAM

儲存檔案

.frm 表定義檔案,.ibd 資料檔案和索引檔案

.frm 表定義檔案,.myd 資料檔案, .myi 索引檔案
表鎖、行鎖 表鎖
事務 支援 不支援
CRUD 讀、寫 讀多
count 掃表 專門儲存的地方
索引結構 B+樹 B+樹

近期在學習MySQL資料庫,後續將會持續更新學習隨筆。