????????MySQL的存儲引擎架構(gòu)將查詢處理與數(shù)據(jù)的存儲/提取相分離楞抡。下面是MySQL的邏輯架構(gòu)圖:
? ? ? ? 下面來講解每部分的作用:
? ? ? 一谒获、連接/線程處理
????????負(fù)責(zé)連接管理诗舰、授權(quán)認(rèn)證查近、安全等等嘶炭。
????????每個客戶端的連接都對應(yīng)著服務(wù)器上的一個線程。服務(wù)器上維護(hù)了一個線程池歹鱼,避免為每個連接都創(chuàng)建銷毀一個線程泣栈。當(dāng)客戶端連接到MySQL服務(wù)器時,服務(wù)器對其進(jìn)行認(rèn)證∧掀可以通過用戶名和密碼的方式進(jìn)行認(rèn)證掺涛,也可以通過SSL證書進(jìn)行認(rèn)證。登錄認(rèn)證通過后疼进,服務(wù)器還會驗證該客戶端是否有執(zhí)行某個查詢的權(quán)限薪缆。
? ? ? 二、服務(wù)層
????????負(fù)責(zé)解析查詢(編譯SQL)伞广,并對其進(jìn)行優(yōu)化(如調(diào)整表的讀取順序拣帽,選擇合適的索引等)。對于SELECT語句嚼锄,在解析查詢前减拭,服務(wù)器會先檢查查詢緩存,如果能在其中找到對應(yīng)的查詢結(jié)果灾票,則無需再進(jìn)行查詢解析峡谊、優(yōu)化等過程,直接返回查詢結(jié)果刊苍。存儲過程既们、觸發(fā)器、視圖等都在這一層實現(xiàn)正什。
? ? ? ? 三啥纸、存儲引擎層
????????存儲引擎負(fù)責(zé)在MySQL中存儲數(shù)據(jù)、提取數(shù)據(jù)婴氮、開啟一個事務(wù)等等斯棒。存儲引擎通過API與上層進(jìn)行通信,這些API屏蔽了不同存儲引擎之間的差異主经,使得這些差異對上層查詢過程透明荣暮。存儲引擎不會去解析SQL。