- 精通MySQL 8(視頻教學版)
- 劉華貞
- 2357字
- 2019-11-22 18:46:01
1.2 MySQL 8的新特性
MySQL從5.7版本直接跳躍發布了8.0版本,可見這是一個令人興奮的里程碑版本。MySQL 8版本在功能上做了顯著的改進與增強,不僅在速度上得到了改善,還提供了一系列巨大的變化,為用戶帶了更好的性能和更棒的體驗。
1.2.1 更簡便的NoSQL支持
NoSQL泛指非關系型數據庫和數據存儲。隨著互聯網平臺的規模飛速發展,傳統的關系型數據庫已經越來越不能滿足需求。從5.6版本開始,MySQL就開始支持簡單的NoSQL存儲功能。MySQL 8對這一功能做了優化,以更靈活的方式實現NoSQL功能,不再依賴模式(schema)。詳細內容請參見第17章。
1.2.2 更好的索引
在查詢中,正確地使用索引可以提高查詢的效率。MySQL 8中新增了隱藏索引和降序索引。隱藏索引可以用來測試去掉索引對查詢性能的影響。在查詢中混合存在多列索引時,使用降序索引可以提高查詢的性能,詳細內容請參見第6章。
1.2.3 更完善的JSON支持
MySQL從5.7開始就支持原生JSON數據的存儲,MySQL 8對這一功能做了優化,增加了聚合函數JSON_ARRAYAGG()和JSON_OBJECTAGG(),將參數聚合為JSON數組或對象,新增了行內操作符->>,是列路徑運算符->的增強,對JSON排序做了提升,并優化了JSON的更新操作,詳細內容請參見第3章,JSON類型及MySQL 8 JSON增強。
1.2.4 安全和賬戶管理
MySQL 8中新增了caching_sha2_password授權插件、角色、密碼歷史記錄和FIPS模式支持,這些特性提高了數據庫的安全性和性能,使數據庫管理員能夠更靈活地進行賬戶管理工作。詳細內容請參考第11章。
1.2.5 InnoDB的變化
InnoDB是MySQL默認的存儲引擎,是事務型數據庫的首選引擎,支持事務安全表(ACID),支持行鎖定和外鍵。在MySQL 8版本中,InnoDB在自增、索引、加密、死鎖、共享鎖等方面做了大量的改進和優化,并且支持原子數據定義語言(DDL),提高了數據安全性,對事務提供更好的支持。詳細內容請參見第16章。
1.2.6 數據字典
在之前的MySQL版本中,字典數據都存儲在元數據文件和非事務表中。從MySQL 8開始新增了事務數據字典,在這個字典里存儲著數據庫對象信息,這些數據字典存儲在內部事務表中。詳細內容請參見第15章。
1.2.7 原子數據定義語句
MySQL 8開始支持原子數據定義語句(Automic DDL),即原子DDL。目前,只有InnoDB存儲引擎支持原子DDL。原子數據定義語句將與DDL操作相關的數據字典更新、存儲引擎操作、二進制日志寫入結合到一個單獨的原子事務中,這使得即使服務器崩潰,事務也會提交或回滾。
使用支持原子操作的存儲引擎所創建的表,在執行DROP TABLE、CREATE TABLE、ALTER TABLE、RENAME TABLE、TRUNCATE TABLE、CREATE TABLESPACE、DROP TABLESPACE等操作時,都支持原子操作,即事務要么完全操作成功,要么失敗后回滾,不再進行部分提交。
對于從MySQL 5.7復制到MySQL 8版本中的語句,可以添加IF EXISTS或IF NOT EXISTS語句來避免發生錯誤。
1.2.8 資源管理
MySQL 8開始支持創建和管理資源組,允許將服務器內運行的線程分配給特定的分組,以便線程根據組內可用資源執行。組屬性能夠控制組內資源,啟用或限制組內資源消耗。數據庫管理員能夠根據不同的工作負載適當地更改這些屬性。
目前,CPU時間是可控資源,由“虛擬CPU”這個概念來表示,此術語包含CPU的核心數、超線程、硬件線程等。服務器在啟動時確定可用的虛擬CPU數量。擁有對應權限的數據庫管理員可以將這些CPU與資源組關聯,并為資源組分配線程。
資源組組件為MySQL中的資源組管理提供了SQL接口。資源組的屬性用于定義資源組。MySQL中存在兩個默認組,系統組和用戶組,默認的組不能被刪除,其屬性也不能被更改。對于用戶自定義的組,資源組創建時可初始化所有的屬性,除去名字和類型,其他屬性都可在創建之后進行更改。
在一些平臺下,或進行了某些MySQL的配置時,資源管理的功能將受到限制,甚至不可用。例如,如果安裝了線程池插件,或者使用的是macOS系統,資源管理將處于不可用狀態。在FreeBSD和Solaris系統中,資源線程優先級將失效。在Linux系統中,只有配置了CAP_SYS_NICE屬性,資源管理優先級才能發揮作用。
1.2.9 字符集支持
MySQL 8中默認的字符集由latin1更改為utf8mb4,并首次增加了日語所特定使用的集合utf8mb4_ja_0900_as_cs。詳情請參見第3章。
1.2.10 優化器增強
MySQL優化器開始支持隱藏索引和降序索引。隱藏索引不會被優化器使用,驗證索引的必要性時不需要刪除索引,先將索引隱藏,如果優化器性能無影響就可以真正地刪除索引。降序索引允許優化器對多個列進行排序,并且允許排序順序不一致。詳細信息請參見第6章。
1.2.11 通用表表達式
通用表表達式(Common Table Expressions)簡稱為CTE。MySQL現在支持遞歸和非遞歸兩種形式的CTE。CTE通過在SELECT語句或其他特定語句前使用WITH語句對臨時結果集進行命名。
基礎語法如下:
WITH cte_name (col_name1,col_name2 ...) AS (Subquery) SELECT * FROM cte_name;
Subquery代表子查詢,子查詢前使用WITH語句將結果集命名為cte_name,在后續的查詢中即可使用cte_name進行查詢。
1.2.12 窗口函數
MySQL 8開始支持窗口函數。在之前的版本中已存在的大部分聚合函數在MySQL 8中也可以作為窗口函數來使用。表1-1列出了MySQL 8中的窗口函數。
表1-1 窗口函數

1.2.13 正則表達式支持
MySQL在8.0.4以后的版本中采用支持Unicode的國際化組件庫實現正則表達式操作,這種方式不僅能提供完全的Unicode支持,而且是多字節安全編碼。MySQL增加了REGEXP_LIKE()、EGEXP_INSTR()、REGEXP_REPLACE()和REGEXP_SUBSTR()等函數來提升性能。另外,regexp_stack_limit和regexp_time_limit系統變量能夠通過匹配引擎來控制資源消耗。
1.2.14 內部臨時表
TempTable存儲引擎取代MEMORY存儲引擎成為內部臨時表的默認存儲引擎。TempTable存儲引擎為VARCHAR和VARBINARY列提供高效存儲。internal_tmp_mem_storage_engine會話變量定義了內部臨時表的存儲引擎,可選的值有兩個,TempTable和MEMORY,其中TempTable為默認的存儲引擎。temptable_max_ram系統配置項定義了TempTable存儲引擎可使用的最大內存數量。
1.2.15 日志記錄
在MySQL 8中錯誤日志子系統由一系列MySQL組件構成。這些組件的構成由系統變量log_error_services來配置,能夠實現日志事件的過濾和寫入。詳細信息請參見第13章的MySQL服務日志。
1.2.16 備份鎖
新的備份鎖允許在線備份期間執行數據操作語句,同時阻止可能造成快照不一致的操作。新備份鎖由LOCK INSTANCE FOR BACKUP和UNLOCK INSTANCE語法提供支持,執行這些操作需要備份管理員特權。
1.2.17 增強的MySQL復制
MySQL 8復制支持對JSON文檔進行部分更新的二進制日志記錄,該記錄使用緊湊的二進制格式,從而節省記錄完整JSON文檔的空間。當使用基于語句的日志記錄時,這種緊湊的日志記錄會自動完成,并且可以通過將新的binlog_row_value_options系統變量值設置為PARTIAL_JSON來啟用。詳細信息請參見第12章的數據復制。
- Embedded Linux Projects Using Yocto Project Cookbook
- Learning Cython Programming(Second Edition)
- Reporting with Visual Studio and Crystal Reports
- 微服務設計原理與架構
- Web Application Development with R Using Shiny(Second Edition)
- 21天學通C++(第6版)
- Python機器學習編程與實戰
- Mastering Ext JS
- 21天學通C++(第5版)
- GameMaker Essentials
- 代替VBA!用Python輕松實現Excel編程
- C++ Application Development with Code:Blocks
- R Data Science Essentials
- 動手打造深度學習框架
- 硬件產品設計與開發:從原型到交付