Mysql邏輯架構介紹

整體概覽:mysql

和其它數據庫相比,MySQL有點不同凡響,它的架構能夠在多種不一樣場景中應用併發揮良好做用。主要體如今存儲引擎的架構上,
插件式的存儲引擎架構將查詢處理和其它的系統任務以及數據的存儲提取相分離。這種架構能夠根據業務的需求和實際須要選擇合適的存儲引擎。
sql

1.鏈接層
最上層是一些客戶端和鏈接服務,包含本地sock通訊和大多數基於客戶端/服務端工具實現的相似於tcp/ip的通訊。主要完成一些相似於鏈接處理、受權認證、及相關的安全方案。在該層上引入了線程池的概念,爲經過認證安全接入的客戶端提供線程。一樣在該層上能夠實現基於SSL的安全連接。服務器也會爲安全接入的每一個客戶端驗證它所具備的操做權限。

2.服務層

  2.1 Management Serveices & Utilities: 系統管理和控制工具
  2.2 SQL Interface: SQL接口
    接受用戶的SQL命令,而且返回用戶須要查詢的結果。好比select from就是調用SQL Interface
  2.3 Parser: 解析器
    SQL命令傳遞到解析器的時候會被解析器驗證和解析。
  2.4 Optimizer: 查詢優化器。
    SQL語句在查詢以前會使用查詢優化器對查詢進行優化。
    用一個例子就能夠理解: select uid,name from user where gender= 1;
    優化器來決定先投影仍是先過濾。

  2.5 Cache和Buffer: 查詢緩存。
    若是查詢緩存有命中的查詢結果,查詢語句就能夠直接去查詢緩存中取數據。
    這個緩存機制是由一系列小緩存組成的。好比表緩存,記錄緩存,key緩存,權限緩存等
    緩存是負責讀,緩衝負責寫。

3.引擎層
存儲引擎層,存儲引擎真正的負責了MySQL中數據的存儲和提取,服務器經過API與存儲引擎進行通訊。不一樣的存儲引擎具備的功能不一樣,這樣咱們能夠根據本身的實際須要進行選取。後面介紹MyISAM和InnoDB

4.存儲層
數據存儲層,主要是將數據存儲在運行於裸設備的文件系統之上,並完成與存儲引擎的交互。

數據庫

查詢說明:緩存

首先,mysql的查詢流程大體是:安全

  • mysql客戶端經過協議與mysql服務器建鏈接,發送查詢語句,先檢查查詢緩存,若是命中(如出一轍的sql才能命中),直接返回結果,不然進行語句解析,也就是說,在解析查詢以前,服務器會先訪問查詢緩存(query cache)——它存儲SELECT語句以及相應的查詢結果集。若是某個查詢結果已經位於緩存中,服務器就不會再對查詢進行解析、優化、以及執行。它僅僅將緩存中的結果返回給用戶便可,這將大大提升系統的性能。
  • 語法解析器和預處理:首先mysql經過關鍵字將SQL語句進行解析,並生成一顆對應的「解析樹」。mysql解析器將使用mysql語法規則驗證和解析查詢;預處理器則根據一些mysql規則進一步檢查解析數是否合法。
  • 查詢優化器當解析樹被認爲是合法的了,而且由優化器將其轉化成執行計劃。一條查詢能夠有不少種執行方式,最後都返回相同的結果。優化器的做用就是找到這其中最好的執行計劃。。
  • 而後,mysql默認使用的BTREE索引,而且一個大體方向是:不管怎麼折騰sql,至少在目前來講,mysql最多隻用到表中的一個索引。
相關文章
相關標籤/搜索