1、MySQL仍是個黑盒子
咱們都知道,只要咱們系統引入了 MySQL 驅動和鏈接池,就能從數據庫鏈接池獲取一個數據庫鏈接,而後就能夠執行增刪改查的操做了。 但是咱們並不知道 MySQL 裏面是怎麼執行的,例如咱們執行了 insert 語句,只知道表裏面多了一條數據,MySQL 是怎麼插入的咱們就不知道了。數據庫
2、解開 MySQL 這個黑盒子
一、一條工做線程:
舉例: 咱們都知道,在 Socket 編程裏,ServerSocket 會有一條線程負責監聽 Socket 發送過來的網絡請求,而且負責從網絡請求裏讀取請求數據,而後再進行處理 。編程
原理: 那麼在 MySQL 裏也是同樣的道理,會有一條工做線程
專門去監聽 MySQL 數據庫鏈接池裏的網絡請求,而且負責將請求中的 SQL 讀取出來。網絡
二、 SQL 接口:
上面說到 MySQL 的工做線程會從網絡鏈接中讀取 SQL。可是接下來是由誰繼續執行呢? 舉例: 咱們能夠想象一下,在咱們的 Web 系統裏頭,Tomcat 這個進程會接收客戶端的網絡請求,而後通過轉發交給咱們寫的接口執行。優化
舉例: 在 MySQL 裏其實也同樣,MySQL 就是一個數據庫管理系統,上面說起到的工做線程會接收各個客戶端的網絡請求,而後通過轉發交給內部的接口執行。 而這裏的內部接口,叫 SQL 接口
,它是 MySQL 內部裏的一個組件。它是一套執行 SQL 語句的接口,專門執行咱們的那些增刪改查的 SQL 語句。spa
三、查詢解析器:
舉例: 咱們都知道,如今的計算機其實都不懂得咱們輸入的命令,它只懂最後的 接收到的0/1信號。線程
舉例: MySQL 也同樣,雖然咱們按照必定的 SQL 語法寫出了 SQL,可是 MySQL 卻不能直接讀懂這個 SQL 語句,而且由於 MySQL 的數據最後是存放在磁盤文件中的,因此須要先解析 SQL 語句,才知道怎麼從磁盤文件中讀取數據、修改數據、新增數據或者是刪除數據。 這時候,查詢解析器
就來了,它會專門對 SQL 語句按照必定的規則進行解析,而後讓 MySQL 理解這個 SQL 語句是要幹啥的。code
四、查詢優化器:
舉例: 相信你們都聽過這麼一句話:條條大道通羅馬,可是確定有的路近,有的路遠。接口
舉例: 而 MySQL 執行 SQL 同樣,也有不少種執行方法能夠獲得同樣的結果,可是一定有的方法執行效率高,有的方法執行效率低。 這個時候,查詢優化器
就來了,它會爲 SQL 制定一套最優的執行計劃。進程
五、執行器:
上面提到了最優的執行計劃,那麼計劃必須有人的去執行,才能獲得咱們寫的 SQL 的結果。class
這時候,MySQL 裏的執行器
會按照查詢優化器生成的一套最優執行計劃,一步一步的執行下去,知道完成這個計劃爲止。
六、存儲引擎:
其實到了最後,真正操做數據庫數據的是 MySQL 裏的存儲引擎
。上面的執行器會根據執行計劃去不斷調用存儲引擎的接口來完成執行計劃。