
上圖為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資料庫, 后續將會持續更新學習隨筆,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/232945.html
標籤:其他
上一篇:Windows安裝MySQL
