MySQL 開(kāi)發(fā)團(tuán)隊(duì)于 12 日宣布 MySQL 8.0.0 開(kāi)發(fā)里程碑版本(DMR)發(fā)布! 可能有人會(huì)驚奇 MySQL 為何從 5.x 一下跳躍到了 8.0。事實(shí)上,MySQL 5.x 系列已經(jīng)延續(xù)了很多年,從被 Oracle 收購(gòu)之前就是 5.1,而收購(gòu)之后一直維持在 5.x,比如 5.5,5.6,5.7 等等。其實(shí),如果按照原本的發(fā)布節(jié)奏,可以把 5.6.x 當(dāng)成 6.x,5.7.x 當(dāng)成 7.x。所以,只是換了版本命名方式而已。
不過(guò)這次發(fā)布的 MySQL 8.0.0 開(kāi)發(fā)版本還是有不少亮點(diǎn)的。
MySQL 8.0.0 亮點(diǎn)
事務(wù)性數(shù)據(jù)字典,完全脫離了 MyISAM 存儲(chǔ)引擎
真正將數(shù)據(jù)字典放到了 InnoDB 中的一些表中,從此不再需要 FRM、TRG、PAR 文件啦!Information Schema 現(xiàn)在以數(shù)據(jù)字典表的一個(gè)視圖出現(xiàn)。原則上可以完全不需要 MyISAM 數(shù)據(jù)表類型了,所有的系統(tǒng)表都可以放到 InnoDB 之中。
SQL 角色
角色是一系列權(quán)限的集合。可以創(chuàng)建角色,給某個(gè)用戶授予和去除角色。這對(duì)于權(quán)限管理很方便。
utf8mb4 字符集將成為默認(rèn)字符集,并支持 Unicode 9
默認(rèn)字符集將從 latin1 改為 utf8mb4,默認(rèn)定序 collation 將從 latin1_swedish_ci 改為 utf8mb4_800_ci_ai。
不可見(jiàn)索引
可以將一些索引設(shè)置為不可見(jiàn),這樣 SQL 優(yōu)化器就不會(huì)用到它,但是它會(huì)繼續(xù)在后臺(tái)保持更新。當(dāng)有需要時(shí),可以隨時(shí)恢復(fù)可見(jiàn)。
對(duì)二進(jìn)制數(shù)據(jù)可以進(jìn)行位操作
不僅僅可以對(duì) BIGINT 進(jìn)行位操作,從 8.0 開(kāi)始也支持對(duì) [VAR]BINARY/[TINYMEDIUMLONG]BLOB 進(jìn)行位操作了。
改進(jìn)了對(duì) IPv6 和 UUID 的操作
INET6_ATON () 和 INET6_NTOA () 現(xiàn)在可以進(jìn)行位操作了,因?yàn)?INET6_ATON ()現(xiàn)在返回的是 VARBINARY (16) 數(shù)據(jù)類型(128 位)。改進(jìn)了 UUID 操作,引入了三個(gè)新的函數(shù) UUID_TO_BIN (), BIN_TO_UUID ()和 IS_UUID () 。MySQL 并沒(méi)有特殊的 IPv6 和 UUID 數(shù)據(jù)類型,而是以 VARBINARY (16) 數(shù)據(jù)類型保存的。
持續(xù)性的全局變量
可以用 SET PERSIST 來(lái)設(shè)置持久性的全局變量,即便重啟也會(huì)保持下來(lái)。
性能數(shù)據(jù)庫(kù) Performance Schema 的改進(jìn)
比如對(duì)性能數(shù)據(jù)庫(kù)增加了 100 多個(gè)索引,可以檢索更快。
重構(gòu) SQL 分析器
持續(xù)不斷的逐步改進(jìn) SQL 分析器。舊的分析器由于其語(yǔ)法復(fù)雜性和自頂向下的分析方式從而有嚴(yán)重的限制,導(dǎo)致難以維護(hù)和擴(kuò)展。
成本模型
InnoDB 緩沖區(qū)現(xiàn)在可以估算主內(nèi)存緩存區(qū)中的有多少表和索引,這可以讓優(yōu)化器選擇訪問(wèn)方式時(shí)知道數(shù)據(jù)是否可以存儲(chǔ)在內(nèi)存中還是必須存儲(chǔ)到磁盤(pán)上。
直方圖 Histograms
通過(guò)使用直方圖,用戶或 DBA 可以對(duì)數(shù)據(jù)分布進(jìn)行統(tǒng)計(jì),這可以用于查詢優(yōu)化以尋找優(yōu)化的查詢方案。
改進(jìn)掃描性能
改進(jìn)了 InnoDB 范圍查詢的性能,可提升全表查詢和范圍查詢 5-20% 的性能。
重構(gòu) BLOB
重構(gòu) BLOB 加速了片段讀取/更新操作,可以加速 JSON 數(shù)據(jù)的操作。
持久化自增值
InnoDB 會(huì)持久化保持自增序列的最大值到 redo 日志中。這個(gè)改進(jìn)還修復(fù)了一個(gè)非常老的 199 號(hào) bug。
臨時(shí)表
取消對(duì)壓縮臨時(shí)表的支持,并存儲(chǔ)臨時(shí)表的元數(shù)據(jù)到內(nèi)存中。
其它的更多重要改進(jìn)和細(xì)節(jié),請(qǐng)參考 MySQL 8.0.0 發(fā)布公告[1]和[2] 。
下載
目前 8.0.0 還是開(kāi)發(fā)版本,如果你希望體驗(yàn)和測(cè)試最新特性,可以從 dev.mysql.com[3] 下載各個(gè)平臺(tái)的安裝包。不過(guò),MySQL 軟件包是越來(lái)越大了,Linux 平臺(tái)上的二進(jìn)制打包后就將近有 1 GB。如果在產(chǎn)品環(huán)境中使用,在 8.0 沒(méi)有進(jìn)入穩(wěn)定版本之前,請(qǐng)繼續(xù)使用 5.7 系列,當(dāng)前最新的版本是 5.7.15 GA 版本——這只有 600 M 多。
最新的源代碼放在GitHub 上,感興趣的朋友可以去看看,其中有不少是中國(guó)人的貢獻(xiàn)。
[1]: http://dev.mysql.com/doc/relnotes/mysql/8.0/en/
[2]: http://mysqlserverteam.com/the-mysql-8-0-0-milestone-release-is-available/
[3]: http://dev.mysql.com/downloads/mysql/