TOP 10
- MySQL 文檔存儲(chǔ)
- 默認(rèn) utf8mb4 編碼
- JSON 增強(qiáng)
- CTEs(譯者注:Common Table Expresssions 公共表格表達(dá)式)
- 窗口函數(shù)
- 降序索引
- 更好的優(yōu)化器消費(fèi)模型
- MySQL 服務(wù)器組件
- GIS(譯者注:Geographic Information System 地理信息系統(tǒng)) 提升
- InnoDB 引擎的 NO WAIT 和 SKIP \ LOCKED 選項(xiàng)
1. MySQL 文檔存儲(chǔ)
這是 MySQL 8.0 中最受期待和最受歡迎的特性 ... 同時(shí)他非常容易理解。
我對(duì) MySQL 文檔存儲(chǔ)非常興奮,我在全球各地展示他快一年的時(shí)間,并收到了很多好的反饋。 為什么 MySQL DS 如此優(yōu)秀? 因?yàn)槭褂靡环N解決方案你可以處理 SQL 和 NoSQL。你也可以將兩種語(yǔ)言的優(yōu)勢(shì)結(jié)合起來(lái)。 你可以對(duì)相同數(shù)據(jù)執(zhí)行 CRUD 命令,同時(shí)你也可以在 SQL 中執(zhí)行如連接多個(gè)表及 and/or 集合這種更復(fù)雜的查詢。
同時(shí)后端是眾所周知強(qiáng)大的 InnoDB 引擎, MySQL 文檔存儲(chǔ)引擎完全符合 ACID 標(biāo)準(zhǔn)。 因?yàn)樗荚?MySQL 內(nèi)部,所以你可以從你熟悉的內(nèi)容中收益,亦可以將其轉(zhuǎn)換到文檔存儲(chǔ): replication, performance_schema, ...
2. 默認(rèn)字符集為 utf8mb4
使用 MySQL 8.0, 我們當(dāng)然關(guān)注現(xiàn)代 Web 應(yīng)用... 這是指移動(dòng)端! 當(dāng)我們提到手機(jī)端, 也是表情符號(hào)和大量的需要共存的字符集和歸類。
這就是為什么我們決定將默認(rèn)的字符集從 latin-1 轉(zhuǎn)為 utf8mb4。 MySQL支持最新的 Unicode 9.0 基于 DUCET 的新分類, 重音和大小寫敏感的歸類,日語(yǔ),俄語(yǔ),...
3. JSON 強(qiáng)化
MySQL 帶來(lái)了一些新的 JSON 相關(guān)變更:
- 新增
->>
表達(dá)式,作用等于JSON_UNQUOTE(JSON_EXTRACT())
- 新的聚合函數(shù)
JSON_ARRAYAGG()
和JSON_OBJECTAGG()
- 新增
JSON_PRETTY()
- 新的 JSON 工具函數(shù)如
JSON_STORAGE_SIZE()
,JSON_STORAGE_FREE()
MySQL 8.0 中 JSON 最重要的優(yōu)化之一,是提供了一個(gè) JSON_TABLE()
函數(shù)。此函數(shù)接受 JSON 格式的數(shù)據(jù),然后將其轉(zhuǎn)化為關(guān)系型數(shù)據(jù)表。字段和數(shù)據(jù)的格式都可以被指定。你也可以對(duì) JSON_TABLE()
以后的數(shù)據(jù)使用正常的 SQL 查詢,如 JOINS, 聚合查詢等, ... 你可以查閱 @stoker 的博文 ,當(dāng)然你也可以閱讀 官方文檔 。
需要注意的是,這不僅僅影響到開(kāi)發(fā)者的使用,MySQL 的執(zhí)行性能也會(huì)受到影響。在老系統(tǒng)中,更新 JSON 時(shí)系統(tǒng)會(huì)刪除老數(shù)據(jù)并寫入新的數(shù)據(jù),在新系統(tǒng)中,如果你要更新 JSON 數(shù)據(jù)里的某個(gè)字段,正確的做法是直接對(duì) JSON 里的某個(gè)字段進(jìn)行更新,這樣執(zhí)行效率更佳,并且數(shù)據(jù)庫(kù)主從復(fù)制(Replication)性能也會(huì)受益。
4. 公共表格表達(dá)式 (CTEs)
MySQL 8.0 新增了 CTEs 功能(譯者注:Common Table Expresssions 公共表格表達(dá)式)。CTE 是一個(gè)命名的臨時(shí)結(jié)果集,僅在單個(gè) SQL 語(yǔ)句的執(zhí)行范圍內(nèi)存在,可以是自引用,也可以在同一查詢中多次引用。
5. 統(tǒng)計(jì)分析方法
針對(duì)查詢中的每一行,一個(gè)統(tǒng)計(jì)分析方法使用該行關(guān)聯(lián)的行執(zhí)行計(jì)算。 這就像 GROUP BY 方法但他是保留行而不是折疊他們。
以下是 MySQL 8.0.4 當(dāng)前實(shí)現(xiàn)的統(tǒng)計(jì)分析方法列表:
| 名稱 | 描述 | | --- | --- | | CUME_DIST()
| 累計(jì)分配值 | | DENSE_RANK()
| 當(dāng)前行在分區(qū)的排名, 沒(méi)有間隔 | | FIRST_VALUE()
| 窗口框架第一行的參數(shù)值 | | LAG()
| 分區(qū)中指定行落后于當(dāng)前行的參數(shù)值 | | LAST_VALUE()
| 窗口框架第一行的參數(shù)值 | | LEAD()
| 分區(qū)中引導(dǎo)當(dāng)前行的參數(shù)值 | | NTH_VALUE()
| 從第N行窗口框架的參數(shù)值 | | NTILE()
| 分區(qū)中當(dāng)前行的桶號(hào) | | PERCENT_RANK()
| 百分比等級(jí)值 | | RANK()
| 當(dāng)前行在分區(qū)中的排名,含間隔 | | ROW_NUMBER()
| 其分區(qū)中的當(dāng)前行數(shù) |
6. 降序索引
在 MySQL 8.0 之前, 當(dāng)在索引定義中使用 DESC 時(shí)該標(biāo)志將被忽略。 現(xiàn)在不再是這樣了! 現(xiàn)在鍵值按降序存儲(chǔ)。以前, 索引可能被按相反順序掃描,但性能會(huì)受到影響??梢园错樞驋呙璧剐蛩饕@將更高效。
7. 更好的優(yōu)化器開(kāi)銷模型
新的優(yōu)化器開(kāi)銷模型(Optimizer Cost Model)現(xiàn)在會(huì)計(jì)算內(nèi)存緩存數(shù)據(jù)和硬盤數(shù)據(jù)。推薦閱讀 ?ystein 的博客文章.
8. MySQL 服務(wù)器模塊
你可以利用此特性來(lái)擴(kuò)展 MySQL 服務(wù)器的功能,這將會(huì)比插件更加容易開(kāi)發(fā)和維護(hù),推薦閱讀 官方文檔。
9. GIS 的提升
MySQL 8.0 對(duì) GIS(譯者注:Geographic Information System 地理信息系統(tǒng)) 的支持有非常高的提升,功能上直追 PostgreSQL。
一些例子:
- 坐標(biāo)軸將擁有單位
- 地理坐標(biāo)系統(tǒng)
- 坐標(biāo)軸將不會(huì)偏移
- 坐標(biāo)軸支持排序
- 坐標(biāo)軸支持方向相關(guān)性
10. InnoDB 引擎 NO WAIT 與 SKIP LOCKED
MySQL 8.0 的 InnoDB 引擎現(xiàn)在可以更好的處理熱行爭(zhēng)搶。 InnoDB 支持 NOWAIT
和 SKIP\ LOCKED
選項(xiàng)與 SELECT ... FOR\ SHARE
和 SELECT ... FOR\ UPDATE
鎖定讀取語(yǔ)句。 NOWAIT
會(huì)在請(qǐng)求行被其他事務(wù)鎖定的情況下立即返回語(yǔ)句。 SKIP LOCKED
從結(jié)果集中刪除被鎖定的行。 參見(jiàn) 使用 NOWAIT 和 SKIP LOCKED 鎖定并發(fā)讀取.
當(dāng)然好的 MySQL 8.0 特性列表不會(huì)在這里結(jié)束, 例如 ="https://dev.mysql.com/doc/refman/8.0/en/regexp.html">支持正則表達(dá)式 也是一個(gè)剛剛出現(xiàn)在 [8.0.4] 版本中的有趣的特性 (https://mysqlserverteam.com/the-mysql-8-0-4-release-candidate-is-available/)。 新的 SQL GROUPING() 功能, IPV6 和 UUID 操作新業(yè)務(wù),更多優(yōu)化器提示...