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

1.5 MySQL 8的新特性

MySQL從5.7版本直接跳躍發(fā)布了8.0版本,可見這是一個(gè)令人興奮的里程碑版本。MySQL 8版本在功能上做了顯著的改進(jìn)與增強(qiáng),不僅在速度上得到了改善,更提供了一系列巨大的變化,為用戶帶來了更好的性能和更棒的體驗(yàn)。

1.5.1 更簡便的NoSQL支持

NoSQL泛指非關(guān)系型數(shù)據(jù)庫和數(shù)據(jù)存儲。隨著互聯(lián)網(wǎng)平臺的規(guī)模飛速發(fā)展,傳統(tǒng)的關(guān)系型數(shù)據(jù)庫已經(jīng)越來越不能滿足需求。從5.6版本開始,MySQL就開始支持簡單的NoSQL存儲功能。MySQL 8對這一功能做了優(yōu)化,以更靈活的方式實(shí)現(xiàn)NoSQL功能,不再依賴模式(Schema)。

1.5.2 更好的索引

在查詢中,正確地使用索引可以提高查詢的效率。MySQL 8中新增了隱藏索引和降序索引。隱藏索引可以用來測試去掉索引對查詢性能的影響。在查詢中混合存在多列索引時(shí),使用降序索引可以提高查詢的性能,詳細(xì)內(nèi)容請參見第10章。

1.5.3 更完善的JSON支持

MySQL從5.7開始就支持原生JSON數(shù)據(jù)的存儲,MySQL 8對這一功能做了優(yōu)化,增加了聚合函數(shù)JSON_ARRAYAGG()和JSON_OBJECTAGG(),將參數(shù)聚合為JSON數(shù)組或?qū)ο螅略隽诵袃?nèi)操作符 ->>,是列路徑運(yùn)算符 ->的增強(qiáng),對JSON排序做了提升,并優(yōu)化了JSON的更新操作。

1.5.4 安全和賬戶管理

MySQL 8中新增了caching_sha2_password授權(quán)插件、角色、密碼歷史記錄和FIPS模式支持,這些特性提高了數(shù)據(jù)庫的安全性和性能,使數(shù)據(jù)庫管理員能夠更靈活地進(jìn)行賬戶管理工作。詳細(xì)內(nèi)容請參見第15章。

1.5.5 InnoDB的變化

InnoDB是MySQL默認(rèn)的存儲引擎,是事務(wù)型數(shù)據(jù)庫的首選引擎,支持事務(wù)安全表(ACID)、行鎖定和外鍵。在MySQL 8版本中,InnoDB在自增、索引、加密、死鎖、共享鎖等方面做了大量的改進(jìn)和優(yōu)化,并且支持原子數(shù)據(jù)定義語言(DDL),提高了數(shù)據(jù)安全性,對事務(wù)提供更好的支持。

1.5.6 數(shù)據(jù)字典

在之前的MySQL版本中,字典數(shù)據(jù)都存儲在元數(shù)據(jù)文件和非事務(wù)表中。從MySQL 8開始新增了事務(wù)數(shù)據(jù)字典,在這個(gè)字典里存儲著數(shù)據(jù)庫對象信息,這些數(shù)據(jù)字典存儲在內(nèi)部事務(wù)表中。

1.5.7 原子數(shù)據(jù)定義語句

MySQL 8開始支持原子數(shù)據(jù)定義語句(Automic DDL),即原子DDL。目前,只有InnoDB存儲引擎支持原子DDL。原子數(shù)據(jù)定義語句將與DDL操作相關(guān)的數(shù)據(jù)字典更新,存儲引擎操作,二進(jìn)制日志寫入結(jié)合到一個(gè)單獨(dú)的原子事務(wù)中,使得即使服務(wù)器崩潰,事務(wù)也會提交或回滾。

使用支持原子操作的存儲引擎所創(chuàng)建的表,在執(zhí)行DROP TABLE、CREATE TABLE、ALTER TABLE、RENAME TABLE、TRUNCATE TABLE、CREATE TABLESPACE、DROP TABLESPACE等操作時(shí),都支持原子操作,即事務(wù)要么完全操作成功,要么失敗后回滾,不再進(jìn)行部分提交。

對于從MySQL 5.7復(fù)制到MySQL 8版本中的語句,可以添加IF EXISTS或IF NOT EXISTS語句來避免發(fā)生錯(cuò)誤。

1.5.8 資源管理

MySQL 8開始支持創(chuàng)建和管理資源組,允許將服務(wù)器內(nèi)運(yùn)行的線程分配給特定的分組,以便線程根據(jù)組內(nèi)可用資源執(zhí)行。組屬性能夠控制組內(nèi)資源,啟用或限制組內(nèi)資源消耗。數(shù)據(jù)庫管理員能夠根據(jù)不同的工作負(fù)載適當(dāng)?shù)馗倪@些屬性。

目前,CPU時(shí)間是可控資源,由“虛擬CPU”來表示,此術(shù)語包含CPU的核心數(shù)、超線程、硬件線程等。服務(wù)器在啟動時(shí)確定可用的虛擬CPU數(shù)量。擁有對應(yīng)權(quán)限的數(shù)據(jù)庫管理員可以將這些CPU與資源組關(guān)聯(lián),并為資源組分配線程。

資源組組件為MySQL中的資源組管理提供了SQL接口。資源組的屬性用于定義資源組。MySQL中存在兩個(gè)默認(rèn)組,即系統(tǒng)組和用戶組,默認(rèn)組不能被刪除,其屬性也不能被更改。對于用戶自定義的組,資源組創(chuàng)建時(shí)可初始化所有的屬性,除去名字和類型,其他屬性都可以在創(chuàng)建之后進(jìn)行更改。

在一些平臺下,或進(jìn)行了某些MySQL的配置時(shí),資源管理的功能將受到限制,甚至不可用。例如,如果安裝了線程池插件,或者使用的是Mac OS系統(tǒng),資源管理將處于不可用狀態(tài)。在FreeBSD和Solaris系統(tǒng)中,資源線程優(yōu)先級將失效。在Linux系統(tǒng)中,只有配置了CAP_SYS_NICE屬性,資源管理優(yōu)先級才能發(fā)揮作用。

1.5.9 字符集支持

MySQL 8中默認(rèn)的字符集由latin1更改為UTF8MB4,并首次增加了日語所特定使用的集合:utf8mb4_ja_0900_as_cs。

1.5.10 優(yōu)化器增強(qiáng)

MySQL優(yōu)化器開始支持隱藏索引和降序索引。隱藏索引不會被優(yōu)化器使用,驗(yàn)證索引的必要性時(shí)不需要?jiǎng)h除索引,先將索引隱藏,如果優(yōu)化器性能無影響,就可以真正地刪除索引。降序索引允許優(yōu)化器對多個(gè)列進(jìn)行排序,并且允許排序順序不一致。

1.5.11 通用表表達(dá)式

MySQL現(xiàn)在支持遞歸和非遞歸兩種形式的通用表表達(dá)式(Common Table Expressions,CTE)。通用表表達(dá)式通過在SELECT語句或其他特定語句前使用WITH語句對臨時(shí)結(jié)果集進(jìn)行命名。

基礎(chǔ)語法如下:

     WITH cte_name (col_name1,col_name2 ...) AS (Subquery)
     SELECT * FROM cte_name;

Subquery代表子查詢,子查詢前使用WITH語句將結(jié)果集命名為cte_name,在后續(xù)的查詢中即可使用cte_name進(jìn)行查詢。

1.5.12 窗口函數(shù)

MySQL 8開始支持窗口函數(shù)。在之前的版本中已存在的大部分聚合函數(shù)在MySQL 8中也可以作為窗口函數(shù)來使用。表1-1列出了MySQL 8中的窗口函數(shù)。

表1-1 窗口函數(shù)

1.5.13 正則表達(dá)式支持

MySQL在8.0.4以后的版本中采用支持Unicode的國際化組件庫實(shí)現(xiàn)正則表達(dá)式操作,這種方式不僅能提供完全的Unicode支持,而且是多字節(jié)安全編碼。MySQL增加了REGEXP_LIKE()、EGEXP_INSTR()、REGEXP_REPLACE()和 REGEXP_SUBSTR()等函數(shù)來提升性能。另外,regexp_stack_limit和regexp_time_limit系統(tǒng)變量能夠通過匹配引擎來控制資源消耗。

1.5.14 內(nèi)部臨時(shí)表

TempTable存儲引擎取代MEMORY存儲引擎成為內(nèi)部臨時(shí)表的默認(rèn)存儲引擎。TempTable存儲引擎為VARCHAR和VARBINARY列提供高效存儲。internal_tmp_mem_storage_engine會話變量定義了內(nèi)部臨時(shí)表的存儲引擎,可選的值有兩個(gè):TempTable和MEMORY,其中TempTable為默認(rèn)的存儲引擎。temptable_max_ram系統(tǒng)配置項(xiàng)定義了TempTable存儲引擎可使用的最大內(nèi)存數(shù)量。

1.5.15 日志記錄

在MySQL 8中錯(cuò)誤日志子系統(tǒng)由一系列MySQL組件構(gòu)成。這些組件的構(gòu)成由系統(tǒng)變量log_error_services來配置,能夠?qū)崿F(xiàn)日志事件的過濾和寫入。

1.5.16 備份鎖

新的備份鎖允許在線備份期間執(zhí)行數(shù)據(jù)操作語句,同時(shí)阻止可能造成快照不一致的操作。新備份鎖由 LOCK INSTANCE FOR BACKUP 和 UNLOCK INSTANCE 語法提供支持,執(zhí)行這些操作需要備份管理員特權(quán)。

1.5.17 增強(qiáng)的MySQL復(fù)制

MySQL 8復(fù)制支持對JSON文檔進(jìn)行部分更新的二進(jìn)制日志記錄,該記錄使用緊湊的二進(jìn)制格式,從而節(jié)省記錄完整JSON文檔的空間。當(dāng)使用基于語句的日志記錄時(shí),這種緊湊的日志記錄會自動完成,并且可以通過將新的binlog_row_value_options系統(tǒng)變量值設(shè)置為PARTIAL_JSON來啟用。

主站蜘蛛池模板: 故城县| 成都市| 老河口市| 安仁县| 新巴尔虎右旗| 涞源县| 东阿县| 那坡县| 称多县| 航空| 灵丘县| 云和县| 麦盖提县| 郯城县| 察雅县| 文安县| 长治市| 阿勒泰市| 保山市| 田东县| 武义县| 房山区| 武威市| 遵义市| 南昌县| 霍州市| 大厂| 浏阳市| 西乌| 永定县| 盐池县| 平度市| 乌拉特中旗| 宜良县| 象山县| 江安县| 平泉县| 泸西县| 土默特右旗| 荔波县| 海宁市|