我們為何對MySQL 8.0的到來感到如此興奮

weixin_33890499發表於2018-05-16

一大早收到一封oracle官方發來的郵件,邀請我參加mysql改版的網路研討會。作為一個後端開發者,想必對mysql是非常是熟悉了。下面來聊一聊mysql8.0的新特性。

11398717-8e65045e27364a47
圖一

臨時表的改進


在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冊程式設計電子書資料

後臺回覆【提問】:資深程式設計師一對一對話

相關文章