在學習SpringCloud的同時,也在深刻學習MySq中,聽着<mysql45講>,,看着<高性能MySQL>,本系列文章是本人學習過程的總結,水平有限,僅供參考,如有不對之處或有啥建議均可與我聯繫,感謝!</mysql45講>html
在學習一個東西以前,瞭解它的歷史都是頗有必要的,那麼首先,咱們先來了解MySQL的歷史。mysql
1.1990年,有一個小夥子被客戶要求提供通用的SQL支持,當時他首先借助了mSQL的代碼進行集成,但效果不太滿意,便本身重寫了一個SQL支持。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分爲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語句。
執行完成後,將結果緩存到查詢緩存中,並返回結果給客戶端。
至此,一條查詢語句執行完了
《高性能MySQL》
https://www.cnblogs.com/eyesf...
若是以爲不錯,分享給你的朋友!
THANDKS
一個立志成大腿而天天努力奮鬥的年輕人
伴學習伴成長,成長之路你並不孤單!