1.5 MySQL 8.0的新特性
簡述和MySQL 5.7相比,MySQL 8.0的新特性主要包括以下幾個方面沈贝。
1.數(shù)據(jù)字典
MySQL 8.0包含一個事務數(shù)據(jù)字典咳短,用于存儲有關數(shù)據(jù)庫對象的信息眶蕉。在MySQL8.0之前的版本中砰粹,字典數(shù)據(jù)存儲在元數(shù)據(jù)文件和非事務表中。
2.原子數(shù)據(jù)定義語句
MySQL 8.0支持原子數(shù)據(jù)定義語言(DDL)語句造挽。此功能稱為原子DDL碱璃。原子DDL語句將與DDL操作關聯(lián)的數(shù)據(jù)字典更新,存儲引擎操作和二進制日志寫入組合到單個原子事務中饭入。即使服務器在操作期間暫停嵌器,也會提交事務,并將適用的更改保留到數(shù)據(jù)字典谐丢、存儲引擎和二進制日志爽航,或者回滾事務。通過在MySQL 8.0中引入MySQL數(shù)據(jù)字典乾忱,可以實現(xiàn)原子DDL讥珍。在早期的MySQL版本中,元數(shù)據(jù)存儲在元數(shù)據(jù)文件窄瘟、非事務性表和存儲引擎特定的字典中衷佃,需要中間提交。MySQL數(shù)據(jù)字典提供的集中式事務元數(shù)據(jù)存儲消除了這一障礙蹄葱,使得將DDL語句操作重組為原子事務成為可能氏义。
3.安全和賬戶管理
MySQL 8.0通過以下功能增強數(shù)據(jù)庫的安全性,并在賬戶管理中實現(xiàn)更高的DBA靈活性图云。MySQL數(shù)據(jù)庫的授權表統(tǒng)一為InnoDB(事務性)表惯悠。每個語句都是事務性的,并且對所有創(chuàng)建的用戶都是成功或者回滾琼稻,發(fā)生任何錯誤都無效吮螺。如果成功饶囚,就將語句寫入二進制日志帕翻;如果失敗則不寫入鸠补,發(fā)生回滾并且不進行任何更改。
MySQL 8.0開始支持角色嘀掸,角色可以看成是一些權限的集合紫岩,為用戶賦予統(tǒng)一的角色,權限的修改直接通過角色來進行睬塌,無須為每個用戶單獨授權泉蝌。管理員可以創(chuàng)建和刪除角色。
MySQL 8.0開始維護有關密碼歷史的信息揩晴,從而限制了以前密碼的重用勋陪。管理員可以在全局以及每個賬戶的基礎上建立密碼重用策略,從而在密碼更改時限制使用以前使用過的密碼硫兰。
MySQL 8.0允許賬戶具有雙密碼诅愚,從而在多服務器系統(tǒng)中無縫地執(zhí)行分階段密碼更改,無須停機劫映。
4.資源管理
MySQL現(xiàn)在支持資源組的創(chuàng)建和管理违孝,并允許將服務器內運行的線程分配給特定的資源組。資源組屬性可以控制其資源泳赋,以啟用或限制資源組中線程的資源消耗雌桑。數(shù)據(jù)庫管理員可以根據(jù)不同的工作負載修改這些屬性。
5.InnoDB增強功能
MySQL 8.0增強了InnoDB的功能祖今,主要表現(xiàn)如下:
(1)MySQL 8.0將自增主鍵的計數(shù)器持久化到重做日志中校坑。每次計數(shù)器發(fā)生改變,都會將其寫入重做日志中衅鹿。如果數(shù)據(jù)庫重啟撒踪,InnoDB會根據(jù)重做日志中的信息來初始化計數(shù)器的內存值。為了盡量減小對系統(tǒng)性能的影響大渤,計數(shù)器寫入重做日志時制妄,并不會馬上刷新數(shù)據(jù)庫系統(tǒng)。
(2)如果索引損壞泵三,InnoDB將索引損壞標志寫入重做日志耕捞,從而使得損壞標志安全。InnoDB還將內存中損壞標志數(shù)據(jù)寫入每個檢查點上的引擎專用系統(tǒng)表烫幕。在恢復期間俺抽,InnoDB從兩個位置讀取損壞標志并在將內存表和索引對象標記為損壞之前合并結果。
(3)新的動態(tài)變量innodb_deadlock_detect可用于禁用死鎖檢測较曼。在高并發(fā)系統(tǒng)上磷斧,當許多線程等待同一個鎖時,死鎖檢測會導致速度減慢,此時禁用死鎖檢測可能更有效弛饭。
6.字符集支持
默認字符集已經(jīng)更改latin1為utf8mb4冕末。該utf8mb4字符集有幾個新的排序規(guī)則,其中包括utf8mb4_ja_0900_as_cs侣颂。
7.增強JSON功能
MySQL增強JSON功能主要表現(xiàn)在以下幾個方面:
(1)添加了->>運算符档桃,相當于調用JSON_UNQUOTE()的結果。
(2)添加了兩個JSON聚合函數(shù)JSON_ARRAYAGG()和JSON_OBJECTAGG()憔晒。JSON_ARRAYAGG()將列或表達式作為其參數(shù)藻肄,并將結果聚合為單個JSON數(shù)組。JSON_OBJECTAGG()取兩個列或表達式拒担,將其解釋為鍵和值嘹屯,并將結果作為單個JSON對象返回。
(3)添加了JSON實用程序功能JSON_PRETTY()从撼,JSON以易于閱讀的格式輸出現(xiàn)有值抚垄;每個JSON對象成員或數(shù)組值都打印在一個單獨的行上,子對象或數(shù)組相對于其父對象是2個空格谋逻。
(4)添加的JSON_MERGE_PATCH()可以合并符合RFC 7396標準的JSON呆馁。在兩個JSON對象上使用時,可以將它們合并為單個JSON對象毁兆。
8.數(shù)據(jù)類型的支持
MySQL 8.0支持將表達式用作數(shù)據(jù)類型的默認值浙滤,包括BLOB、TEXT气堕、GEOMETRY和JSON數(shù)據(jù)類型纺腊,在以前的版本中是根本不會被分配默認值的。
9.查詢的優(yōu)化
MySQL 8.0在查詢方面的優(yōu)化表現(xiàn)如下:
(1)MySQL 8.0開始支持不可見索引茎芭。優(yōu)化器根本不使用不可見索引揖膜,但會以其他方式正常維護。默認情況下梅桩,索引是可見的壹粟。通過不可見索引,數(shù)據(jù)庫管理員可以檢測索引對查詢性能的影響宿百,而不會進行破壞性的更改趁仙。
(2)MySQL8.0開始支持降序索引。DESC在索引定義中不再被忽略垦页,而且會降序存儲索引字段雀费。
10.公用表表達式
MySQL現(xiàn)在支持非遞歸和遞歸的公用表表達式。公用表表達式允許使用命名的臨時結果集痊焊,通過允許WITH語句之前的子句SELECT和某些其他語句來實現(xiàn)盏袄。
11.窗口函數(shù)
在MySQL 8.0版本中忿峻,新增了一個窗口函數(shù),用它可以實現(xiàn)很多新的查詢方式辕羽。窗口函數(shù)類似于SUM()炭菌、COUNT()那樣的集合函數(shù),但它并不會將多行查詢結果合并為一行逛漫,而是將結果放回多行當中。
12.統(tǒng)計直方圖
MySQL 8.0實現(xiàn)了統(tǒng)計直方圖赘艳。利用直方圖酌毡,用戶可以對一張表的一列做數(shù)據(jù)分布的統(tǒng)計,特別是針對沒有索引的字段蕾管。這可以幫助查詢優(yōu)化器找到更優(yōu)的執(zhí)行計劃枷踏。
13.備份鎖
新類型的備份鎖在聯(lián)機備份期間允許DML,同時防止可能導致快照不一致的操作掰曾。新的備份鎖由LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE語法支持旭蠕。管理員擁有BACKUP_ADMIN權限才能使用這些語句。如果讀者想進一步深入學習MySQL 8.0的新功能旷坦,可以參照官方的相關資料:https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html?tdsourcetag=s_pctim_aiomsg掏熬。
本文轉載自《MySQL 8從入門到精通(視頻教學版) 》,更多詳情信息請各大平臺購買書籍了解秒梅。