mysql 8.0 正式版 8.0.11 已發(fā)布,官方表示 mysql 8 要比 mysql 5.7 快 2 倍,還帶來(lái)了大量的改進(jìn)和更快的性能!
推薦手冊(cè):MySQL開發(fā)手冊(cè)
注意:從 MySQL 5.7 升級(jí)到 MySQL 8.0 僅支持通過(guò)使用 in-place 方式進(jìn)行升級(jí),并且不支持從 MySQL 8.0 降級(jí)到 MySQL 5.7(或從某個(gè) MySQL 8.0 版本降級(jí)到任意一個(gè)更早的 MySQL 8.0 版本)。唯一受支持的替代方案是在升級(jí)之前對(duì)數(shù)據(jù)進(jìn)行備份。
推薦課程:MySQL教程。
?
MySQL 8.0是全球最受歡迎的開源數(shù)據(jù)庫(kù)的一個(gè)非常令人興奮的新版本,全面改進(jìn)。一些關(guān)鍵的增強(qiáng)包括:
SQL窗口函數(shù),公用表表達(dá)式,NOWAIT和SKIP LOCKED,降序索引,分組,正則表達(dá)式,字符集,成本模型和直方圖。
JSON擴(kuò)展語(yǔ)法,新功能,改進(jìn)排序和部分更新。使用JSON表函數(shù),您可以使用JSON數(shù)據(jù)的SQL機(jī)制。
GIS地理支持。空間參考系統(tǒng)(SRS),以及SRS感知空間數(shù)據(jù)類型,空間索引和空間功能。
可靠性 DDL語(yǔ)句已變得原子性和崩潰安全,元數(shù)據(jù)存儲(chǔ)在單個(gè)事務(wù)數(shù)據(jù)字典中。由InnoDB提供支持!
可觀察性性能架構(gòu),信息架構(gòu),配置變量和錯(cuò)誤記錄的顯著增強(qiáng)。
可管理性遠(yuǎn)程管理,撤消表空間管理和新的即時(shí)DDL。
安全 OpenSSL改進(jìn),新的默認(rèn)身份驗(yàn)證,SQL角色,分解超級(jí)特權(quán),密碼強(qiáng)度等等。
性能 InnoDB在讀/寫工作負(fù)載,IO綁定工作負(fù)載和高爭(zhēng)用“熱點(diǎn)”工作負(fù)載方面明顯更好。增加了資源組功能,通過(guò)將用戶線程映射到CPU,為用戶提供一個(gè)選項(xiàng),以針對(duì)特定硬件上的特定工作負(fù)載進(jìn)行優(yōu)化
上面描述了一些亮點(diǎn),我鼓勵(lì)你進(jìn)一步深入到完整的系列里程碑博客posts-的8.0.0,8.0.1,8.0.2,8.0.3和8.0.4 -和甚至進(jìn)一步向下個(gè)人工作日志及其規(guī)格和實(shí)施細(xì)節(jié)。或者,您也許只想看看github.com/mysql上的源代碼。
?開發(fā)者功能
MySQL開發(fā)人員需要新功能,而MySQL 8.0在諸如SQL,JSON,正則表達(dá)式和GIS等領(lǐng)域提供了許多新的和更多需求的功能。開發(fā)人員也希望能夠存儲(chǔ)Emojis,因此UTF8MB4現(xiàn)在是8.0中的默認(rèn)字符集。最后,數(shù)據(jù)類型得到了改進(jìn),在BINARY數(shù)據(jù)類型上進(jìn)行了按位操作,并且改進(jìn)了IPv6和UUID功能。
?
下面簡(jiǎn)要介紹 MySQL 8 中值得關(guān)注的新特性和改進(jìn)。
1.性能:MySQL 8.0 的速度要比 MySQL 5.7 快 2 倍。MySQL 8.0 在以下方面帶來(lái)了更好的性能:讀/寫工作負(fù)載、IO 密集型工作負(fù)載、以及高競(jìng)爭(zhēng)(”hot?spot”熱點(diǎn)競(jìng)爭(zhēng)問(wèn)題)工作負(fù)載。
2. NoSQL:MySQL 從 5.7 版本開始提供 NoSQL 存儲(chǔ)功能,目前在 8.0 版本中這部分功能也得到了更大的改進(jìn)。該項(xiàng)功能消除了對(duì)獨(dú)立的 NoSQL 文檔數(shù)據(jù)庫(kù)的需求,而 MySQL 文檔存儲(chǔ)也為 schema-less 模式的 JSON 文檔提供了多文檔事務(wù)支持和完整的 ACID 合規(guī)性。
3.?窗口函數(shù)(Window Functions):從 MySQL 8.0 開始,新增了一個(gè)叫窗口函數(shù)的概念,它可以用來(lái)實(shí)現(xiàn)若干新的查詢方式。窗口函數(shù)與 SUM()、COUNT() 這種集合函數(shù)類似,但它不會(huì)將多行查詢結(jié)果合并為一行,而是將結(jié)果放回多行當(dāng)中。即窗口函數(shù)不需要 GROUP BY。
4.?隱藏索引:在 MySQL 8.0 中,索引可以被“隱藏”和“顯示”。當(dāng)對(duì)索引進(jìn)行隱藏時(shí),它不會(huì)被查詢優(yōu)化器所使用。我們可以使用這個(gè)特性用于性能調(diào)試,例如我們先隱藏一個(gè)索引,然后觀察其對(duì)數(shù)據(jù)庫(kù)的影響。如果數(shù)據(jù)庫(kù)性能有所下降,說(shuō)明這個(gè)索引是有用的,然后將其“恢復(fù)顯示”即可;如果數(shù)據(jù)庫(kù)性能看不出變化,說(shuō)明這個(gè)索引是多余的,可以考慮刪掉。
5.?降序索引:MySQL 8.0 為索引提供按降序方式進(jìn)行排序的支持,在這種索引中的值也會(huì)按降序的方式進(jìn)行排序。
6. 通用表表達(dá)式(Common Table Expressions CTE):在復(fù)雜的查詢中使用嵌入式表時(shí),使用 CTE 使得查詢語(yǔ)句更清晰。
7. UTF-8 編碼:從 MySQL 8 開始,使用 utf8mb4 作為 MySQL 的默認(rèn)字符集。
8. JSON:MySQL 8 大幅改進(jìn)了對(duì) JSON 的支持,添加了基于路徑查詢參數(shù)從 JSON 字段中抽取數(shù)據(jù)的 JSON_EXTRACT() 函數(shù),以及用于將數(shù)據(jù)分別組合到 JSON 數(shù)組和對(duì)象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函數(shù)。
9. 可靠性:InnoDB 現(xiàn)在支持表 DDL 的原子性,也就是 InnoDB 表上的 DDL 也可以實(shí)現(xiàn)事務(wù)完整性,要么失敗回滾,要么成功提交,不至于出現(xiàn) DDL 時(shí)部分成功的問(wèn)題,此外還支持 crash-safe 特性,元數(shù)據(jù)存儲(chǔ)在單個(gè)事務(wù)數(shù)據(jù)字典中。
10.?高可用性(High Availability):InnoDB 集群為您的數(shù)據(jù)庫(kù)提供集成的原生 HA 解決方案。
11. 安全性:對(duì) OpenSSL 的改進(jìn)、新的默認(rèn)身份驗(yàn)證、SQL 角色、密碼強(qiáng)度、授權(quán)。