我們為何對MySQL 8.0的到來感到如此興奮
一大早收到一封oracle官方發來的郵件,邀請我參加mysql改版的網路研討會。作為一個後端開發者,想必對mysql是非常是熟悉了。下面來聊一聊mysql8.0的新特性。
臨時表的改進
在MySQL5.7中,所有的臨時表都被建立在一個叫“ibtmp1”的表空間中。另外,臨時表的後設資料也將儲存在記憶體中(不再儲存在frm檔案中)。
在MySQL8.0中,使用臨時表儲存引擎作為臨時表(為優化JOIN、UNION等操作而建立的)儲存的預設引擎,從而替換掉了原有的記憶體儲存引擎。
新的引擎使得VARCHAR和VARBINARY列的儲存更為高效(所有儲存空間得到完全分配)。
持續的全域性變數
MySQL8.0現在可以設定變數並使其改變持續到伺服器重新啟動。
使用此語法結合新的RESTART命令,可以非常容易的從shell中配置MySQL。這對雲端計算使用者是一個十分友好的功能。
取消預設MyISAM系統表
由於採用了新的本地資料字典,現在我們不在需要MyISAM系統表了!
這些表和資料字典表現在都在一個名為mysql.idb的InNoDB表空間檔案中。
這意味著如果你沒有明確使用MyISAM表(為了你的資料,我們並不建議這樣做),你可以建立一個沒有任何MyISAM表的MySQL例項。
UNDO空間回收
在MySQL5.7中,我們已經可以截斷UNDO空間了(設定innodb_undo_log_truncate,預設情況下禁用)。
在MySQL8中,我們改進了磁碟格式來使得每個UNDO表有大量的UNDO段。
此外,現在預設為兩個單獨的UNDO表空間(而非InnoDB系統表空間(最小為2,大小動態變化))中建立UNDO段。
我們不推薦使用innodb_undo_tablespaces來設定該值,因為我們將提供SQL命令讓資料庫管理員與UNDO表空間進行互動。
自動截斷UNDO表空間預設啟用。
UTF8效能改進
UTF8效能
由於預設的字符集已經從latin1改為utf8mb4,因此現在UTF8的速度要快得多,在特定查詢時速度提高了1800%! Emojis現在無處不在,MySQL當然是選擇支援他啦!??
取消Query Cache
我在效能審計中建議的第一件事就是禁用Query Cache,因為它給設計帶來了很多麻煩。
MySQL QC造成的問題比它解決問題要多的多。因此我們決定在MySQL 8.0中取消它,因為大家就不應該使用它。
如果您的工作負載需要Query Cache,那麼您應該改用ProxySQL替代Query Cache。
原子DDL
由於採用了新的資料字典,MySQL 8.0現在支援原子資料定義語句(原子DDL)。
這意味著當執行DDL時,資料字典更新,儲存引擎操作以及二進位制日誌中的寫入操作會合併到單個原子事務中,該事務要麼完全執行,要麼根本不執行。
這提高了DDL的穩定性保證未完成的DDL不會留下任何不完整的資料。
8.更快、效能更好的Schema和Information Schema
我們對Schema進行了許多改進,如假索引和直方圖。
得益於假索引的存在,像SELECT * FROM sys.session這樣的查詢速度提高了30倍。
查詢儘可能避免進行表掃描,並且索引的使用可大大縮短執行時間。
除此之外,Performance Schema還提供語句延遲的直方圖。 新的直方圖也使得優化器更為高效。
新的資料字典也使得Information Schema得到了改進,現在不需要大量的.frm表結構定義檔案。
另外Information Schema現在支援擴充套件到超過1,000,000張表啦!
角色管理
MySQL 8.0中新增了SQL角色功能。 角色是指定的擁有特定許可權的集合。 像使用者帳戶一樣,角色可以擁有授予和撤消的許可權。
角色可以預設或採用session修改。 也可強制設定角色。
加密表空間中的REDO日誌和UNDO日誌都將被加密
在MySQL 5.7中,可以為儲存在每個表中的表加密InnoDB表空間。 在MySQL 8.0中,我們通過為UNDO和REDO日誌新增加密來完成此功能。
除此以外,還有很多改進我沒有列完。 還有很多其他不錯的功能。 我想在下面再列出一些我認為重要的(儘管所有的改進都很重要??)
文末福利,關注我的公眾號:
後臺回覆【視訊】:免費獲取100G學習視訊
後臺回覆【書籍真多】:免費獲取超1000冊程式設計電子書資料
後臺回覆【提問】:資深程式設計師一對一對話
相關文章
- 為什麼開發者對Java 9如此的興奮Java
- C# 8.0的三個令人興奮的新特性C#
- CommunityServer讓我興奮不已UnityServer
- Clojure:讓我興奮的程式語言
- G胖談《半衰期3》:我們的遊戲設計師會讓大家興奮遊戲設計師
- 如果生活被谷歌人工智慧接管 我們應該興奮還是恐慌?谷歌人工智慧
- 從入門到放棄,我們為何從 Blazor 回到 VueBlazorVue
- 為何我們要用 React 來寫小程式 - Taro 誕生記React
- Python是如何火起來的 為何發展如此迅速Python
- 【譯】為何我們要寫super(props)?
- 為何我們都會喜歡App Store?APP
- 大資料時代,我們如此赤裸大資料
- 為何我們前端從Vue 2遷移到Svelte?前端Vue
- 對未來感到迷惘?為什麼不早點進入IT行業?行業
- 我們為何選擇 Cilium 作為 Kubernetes 的網路介面
- 開發者和設計師:為何我們不能化干戈為玉帛
- 我們對技術的依賴有多強?程式設計師為何關注它?程式設計師
- 使用者體驗的一致性為何對Twitter如此重要
- Cayman Finance對歐盟認可開曼群島的合作感到高興NaN
- 深度學習的困境,我們該何去何從?深度學習
- 遊戲將帶我們到什麼樣的未來?遊戲
- MySQL 5.7 升級到 8.0MySql
- 團隊解散,我們該何去何從?
- 為什麼我要垂直對齊程式碼(你也要如此!)
- 程式設計師們,覺得自己最興奮是什麼時候?程式設計師
- 資料視覺化為什麼對我們的生活影響越來越大?視覺化
- 邊緣計算和5G:我們從何而來?
- 面試官:我們們來聊一聊mysql主從延遲面試MySql
- [譯]為何前端開發如此不穩定前端
- [譯] 為何前端開發如此不穩定前端
- 前端這條路,我們該何去何從前端
- React:從來如此便對麼React
- 走一波興奮的Spring BootSpring Boot
- 為什麼我的mysql配不起來MySql
- 測試者和開發者,為何我們不能友好地相處?
- 我們們一起來談談,redis為什麼快?Redis
- 對不起,我們來遲了——webpack 中文社群Web
- DDoS攻擊如此猖獗,我們該如何解決?