今天,讓我們看一下MySQL8.0提升數據庫管理員工作效率的十大改進。
從一大堆特性你們找出十點並不太容易,以下是這十大特性:
1.臨時表的改進
2.持續的全局變量
3.取消默認MyISAM系統表
4.UNDO空間回收
5.UTF8性能改進
6.取消Query Cache
7.原子DDL
8.更快、性能更好的Schema和Information Schema
9.角色管理
10.加密表空間中的REDO日志和UNDO日志都將被加密
臨時表的改進
在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日志添加加密來完成此功能。
除此以外,還有很多改進我沒有列完。 還有很多其他不錯的功能。 我想在下面再列出一些我認為重要的(盡管所有的改進都很重要😉)
1.持久自動增量
2.InnoDB的自校正
3.JSON性能優化
3.隱形索引
4.新的備份鎖
5.資源組功能
6.額外的二進制日志元數據
7.以及OpenSSL for Community Edition