MySQL之架構簡單分析

 

 

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

鏈接器:sql

當鏈接MySQL數據庫時,等待的將是MySQL服務端的鏈接器;鏈接器的職責是和客戶端創建鏈接、獲取權限、維持和管理鏈接。客戶端鏈接命令通常是以下所示(建議:不要在命令中顯示添加登入密碼):數據庫

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

查詢緩存:緩存

創建完鏈接後,就可執行select語句。執行就會走向查詢緩存。架構

MySQL拿到這個查詢請求後,就會先到緩存中看看,以前是否是執行了該語句。在查詢緩存中數據是以key-value形式存在的,key爲執行的查詢請求,value爲查詢結果。若是執行了就直接從緩存中把結果返回給客戶端,請求結束。若是語句不在緩存中,就執行後續複雜操做。學習

在大多數狀況下不建議使用查詢緩存,爲何呢?由於查詢緩存每每弊大於利。優化

查詢緩存的失效很是頻繁,只要對錶進行了更新,該表的中查詢緩存所有清除。因此每每不少時候,緩存還沒使用就被清除了。對於更新壓力很大的數據庫來講,查詢緩存的命中率很低。若是你的業務中存在一張靜態表,很長時間纔會更新一次。好比,系統配置表,那這張表的查詢才適合查詢緩存。spa

該功能是自動配置的。能夠將參數 query_cache_type 設置成 DEMAND ,這樣對於默認的SQL語句就不會使用查詢緩存。而對於肯定的查詢語句,能夠使用 SQL_CACHE 顯示指定,好比以下語句:code

select SQL_CACHE * from t where id = 1;

注意:在MySQL8.0以後的版本,把查詢緩存模塊移除了。blog

分析器

 在沒有命中查詢緩存後,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數據庫, 後續將會持續更新學習隨筆。

相關文章
相關標籤/搜索