深入學習MySQL 01 一條查詢語句的執行過程

在學習SpringCloud的同時,也在深入學習MySq中,聽着<mysql45講>,,看着<高性能MySQL>,本系列文章是本人學習過程的總結,水平有限,僅供參考,若有不對之處或有啥建議都可與我聯繫,感謝!</mysql45講>

在學習一個東西之前,瞭解它的歷史都是很有必要的,那麼首先,我們先來了解MySQL的歷史。

MySQL的前世今生

1.1990年,有一個小夥子被客戶要求提供通用的SQL支持,當時他首先借助了mSQL的代碼進行集成,但效果不太滿意,便自己重寫了一個SQL支持。

2.1995年,1.0版的MySQL發佈,內部引擎爲ISAM。

3.1999年,MySQL AB公司成立,並開發出Berkeley DB引擎,BDB引擎支持事務,這是MySql第一個支持事務的引擎。

4.2000年,MySQL開源,重新整理存儲引擎ISAM,重命名MyISAM。

5.2001年,集成了存儲引擎InnoDB,這個引擎不僅能持事務處理,並且支持行級鎖。後來該引擎被證明是最爲成功的MySQL事務存儲引擎。

6.2006年,Oracle把InnoDB引擎的開發公司innobase收購完成。MySQL明確地表現出邁向高性能數據庫的發展步伐。

7.2008年,Sun公司以10億收購了MySQL AB。

8.螳螂捕蟬,黃雀在後。2009年,數據庫老大Oracle大筆一揮,74億美將Sun和MySQL通盤收於旗下,從此MySQL數據庫進入Oracle時代。

9.2010年,MySQL 5.5正式版發佈,Oracle完成了大量改進,並將innodb改成默認引擎。

10.由於MySQL的開源性被廣泛傳播,也被更多的人瞭解。伴隨着更多的技術開發人員加入到MySQL開發中,從此它被不斷完善,一步一步邁向人生巔峯。

11.歷史只需要瞭解,不需要背誦哈~

MySQL邏輯架構

大體上,MySQL分爲Server層和存儲引擎層。

Server層包括連接器、查詢緩存、分析器、優化器、執行器等。這一層提供了一些核心公用服務,包括了內置函數、視圖、觸發器等功能。

存儲引擎層主要是提供數據存儲與提取服務,它是插件式的,支持MyISAM、InnoDB、Memory等。MySQL5.5起,默認使用InnoDB

查詢語句的執行過程

sql語句:select * from T where ID = 1

1.連接器
首先需要經過連接器,建立與MySQL的連接,在這裏會做身份認證(驗證賬號密碼)、權限讀取(獲取你的相關權限,用於做權限的邏輯判斷),而且這會有個線程池用於管理線程

2.查詢緩存
驗證身份通過後,會在查詢緩存中查詢找有沒有緩存,命中的話就直接返回結果,否則進入分析器。查詢緩存是以鍵值對的形式保存緩存的,key存儲sql語句,value存儲查詢結果。

ps:建議關閉查詢緩存。因爲當表的更新時,相應表的查詢緩存會被全部清空,這會導致緩存的命中率很低,維護查詢緩存也會消耗一定的性能

3.分析器
首先進行"詞法分析",從你輸入的SQL中識別出"select"則認爲這是查詢語句,還會識別出"T"爲表名,"ID"爲列名等等

然後進行"語法分析",判斷整個sql語句是否錯誤,並判斷是否存在"T"表,是否存在列"ID"
4.優化器
在這會對SQL語句進行優化,比如索引的選取,多表關聯(join)時連接表的順序等,然後選取最優的方案生成執行計劃

ps:優化器有時也會有出錯,比如選錯索引

5.執行器
首先判斷該用戶有無對該表查詢的權限,無則直接返回,有則根據執行計劃執行SQL語句。
執行完成後,將結果緩存到查詢緩存中,並返回結果給客戶端。

至此,一條查詢語句執行完了

參考 《MySQL45講》

《高性能MySQL》
https://www.cnblogs.com/eyesfree/p/7232559.html

如果覺得不錯,分享給你的朋友!

THANDKS

  • End -

一個立志成大腿而每天努力奮鬥的年輕人

伴學習伴成長,成長之路你並不孤單!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章