官术网_书友最值得收藏!

1.5 MySQL 8.0的新特性簡述

和MySQL 5.7相比,MySQL 8.0的新特性主要包括以下幾個方面。

1.數據字典

MySQL 8.0包含一個事務數據字典,用于存儲有關數據庫對象的信息。在MySQL 8.0之前的版本中,字典數據存儲在元數據文件和非事務表中。

2.原子數據定義語句

MySQL 8.0支持原子數據定義語言(DDL)語句。此功能稱為原子DDL。原子DDL語句將與DDL操作關聯的數據字典更新,存儲引擎操作和二進制日志寫入組合到單個原子事務中。即使服務器在操作期間暫停,也會提交事務,并將適用的更改保留到數據字典、存儲引擎和二進制日志,或者回滾事務。通過在MySQL 8.0中引入MySQL數據字典,可以實現原子DDL。在早期的MySQL版本中,元數據存儲在元數據文件、非事務性表和存儲引擎特定的字典中,需要中間提交。MySQL數據字典提供的集中式事務元數據存儲消除了這一障礙,使得將DDL語句操作重組為原子事務成為可能。

3.安全和賬戶管理

MySQL 8.0通過以下功能增強數據庫的安全性,并在賬戶管理中實現更高的DBA靈活性。

MySQL數據庫的授權表統一為InnoDB(事務性)表。每個語句都是事務性的,并且對所有創建的用戶都是成功或者回滾,發生任何錯誤都無效。如果成功,就將語句寫入二進制日志;如果失敗則不寫入,發生回滾并且不進行任何更改。

MySQL 8.0開始支持角色,角色可以看成是一些權限的集合,為用戶賦予統一的角色,權限的修改直接通過角色來進行,無須為每個用戶單獨授權。管理員可以創建和刪除角色。

MySQL 8.0開始維護有關密碼歷史的信息,從而限制了以前密碼的重用。管理員可以在全局以及每個賬戶的基礎上建立密碼重用策略,從而在密碼更改時限制使用以前使用過的密碼。

MySQL 8.0允許賬戶具有雙密碼,從而在多服務器系統中無縫地執行分階段密碼更改,無須停機。

4.資源管理

MySQL現在支持資源組的創建和管理,并允許將服務器內運行的線程分配給特定的資源組。資源組屬性可以控制其資源,以啟用或限制資源組中線程的資源消耗。數據庫管理員可以根據不同的工作負載修改這些屬性。

5.InnoDB增強功能

MySQL 8.0增強了InnoDB的功能,主要表現如下:

(1)MySQL 8.0將自增主鍵的計數器持久化到重做日志中。每次計數器發生改變,都會將其寫入重做日志中。如果數據庫重啟,InnoDB會根據重做日志中的信息來初始化計數器的內存值。為了盡量減小對系統性能的影響,計數器寫入重做日志時,并不會馬上刷新數據庫系統。

(2)如果索引損壞,InnoDB將索引損壞標志寫入重做日志,從而使得損壞標志安全。InnoDB還將內存中損壞標志數據寫入每個檢查點上的引擎專用系統表。在恢復期間,InnoDB從兩個位置讀取損壞標志并在將內存表和索引對象標記為損壞之前合并結果。

(3)新的動態變量innodb_deadlock_detect可用于禁用死鎖檢測。在高并發系統上,當許多線程等待同一個鎖時,死鎖檢測會導致速度減慢,此時禁用死鎖檢測可能更有效。

6.字符集支持

默認字符集已經更改latin1為utf8mb4。該utf8mb4字符集有幾個新的排序規則,其中包括utf8mb4_ja_0900_as_cs。

7.增強JSON功能

MySQL增強JSON功能主要表現在以下幾個方面:

(1)添加了->>運算符,相當于調用JSON_UNQUOTE()的結果。

(2)添加了兩個JSON聚合函數JSON_ARRAYAGG()和JSON_OBJECTAGG()。JSON_ARRAYAGG()將列或表達式作為其參數,并將結果聚合為單個JSON數組。JSON_OBJECTAGG()取兩個列或表達式,將其解釋為鍵和值,并將結果作為單個JSON對象返回。

(3)添加了JSON實用程序功能JSON_PRETTY(),JSON以易于閱讀的格式輸出現有值;每個JSON對象成員或數組值都打印在一個單獨的行上,子對象或數組相對于其父對象是2個空格。

(4)添加的JSON_MERGE_PATCH()可以合并符合RFC 7396標準的JSON。在兩個JSON對象上使用時,可以將它們合并為單個JSON對象。

8.數據類型的支持

MySQL 8.0支持將表達式用作數據類型的默認值,包括BLOB、TEXT、GEOMETRY和JSON數據類型,在以前的版本中是根本不會被分配默認值的。

9.查詢的優化

MySQL 8.0在查詢方面的優化表現如下:

(1)MySQL 8.0開始支持不可見索引。優化器根本不使用不可見索引,但會以其他方式正常維護。默認情況下,索引是可見的。通過不可見索引,數據庫管理員可以檢測索引對查詢性能的影響,而不會進行破壞性的更改。

(2)MySQL8.0開始支持降序索引。DESC在索引定義中不再被忽略,而且會降序存儲索引字段。

10.公用表表達式

MySQL現在支持非遞歸和遞歸的公用表表達式。公用表表達式允許使用命名的臨時結果集,通過允許WITH語句之前的子句SELECT和某些其他語句來實現。

11.窗口函數

在MySQL 8.0版本中,新增了一個窗口函數,用它可以實現很多新的查詢方式。窗口函數類似于SUM()、COUNT()那樣的集合函數,但它并不會將多行查詢結果合并為一行,而是將結果放回多行當中。

12.統計直方圖

MySQL 8.0實現了統計直方圖。利用直方圖,用戶可以對一張表的一列做數據分布的統計,特別是針對沒有索引的字段。這可以幫助查詢優化器找到更優的執行計劃。

13.備份鎖

新類型的備份鎖在聯機備份期間允許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。

主站蜘蛛池模板: 罗定市| 浦江县| 黎川县| 盐城市| 贡嘎县| 左权县| 德庆县| 巨鹿县| 穆棱市| 潼南县| 定兴县| 赣州市| 冕宁县| 庄浪县| 拜泉县| 昌图县| 双柏县| 腾冲县| 敦化市| 杭锦后旗| 漳浦县| 桂东县| 夏津县| 新化县| 田东县| 津市市| 衡山县| 密山市| 宽城| 郴州市| 蓬安县| 清水县| 石渠县| 德阳市| 韶关市| 绥宁县| 阜阳市| 方山县| 峨眉山市| 金坛市| 涿鹿县|