MySQL开发团队于12日宣布MySQL 8.0.0开发里程碑版本(DMR)发布!可能有人会惊奇MySQL为何从5.x一下跳跃到了8.0。事实上,MySQL 5.x系列已经延续了很多年,从被Oracle收购之前就是5.1,而收购之后一直维持在5.x,比如5.5,5.6,5.7等等。其实,如果按照原本的发布节奏,可以把5.6.x当成6.x,5.7.x当成7.x。所以,只是换了版本命名方式而已。
不过这次发布的MySQL 8.0.0开发版本还是有不少亮点的。
MySQL 8.0.0亮点
事务性数据字典,完全脱离了MyISAM存储引擎
真正将数据字典放到了InnoDB中的一些表中,从此不再需要FRM、TRG、PAR文件啦!Information Schema现在以数据字典表的一个视图出现。原则上可以完全不需要MyISAM数据表类型了,所有的系统表都可以放到InnoDB之中。
SQL角色
角色是一系列权限的集合。可以创建角色,给某个用户授予和去除角色。这对于权限管理很方便。
utf8mb4字符集将成为默认字符集,并支持Unicode 9
默认字符集将从latin1改为utf8mb4,默认定序collation将从latin1_swedish_ci改为utf8mb4_800_ci_ai。
不可见索引
可以将一些索引设置为不可见,这样SQL优化器就不会用到它,但是它会继续在后台保持更新。当有需要时,可以随时恢复可见。
对二进制数据可以进行位操作
不仅仅可以对BIGINT进行位操作,从8.0开始也支持对[VAR]BINARY/[TINY|MEDIUM|LONG]BLOB进行位操作了。
改进了对IPv6和UUID的操作
INET6_ATON()和INET6_NTOA()现在可以进行位操作了,因为INET6_ATON()现在返回的是VARBINARY(16)数据类型(128位)。改进了UUID操作,引入了三个新的函数UUID_TO_BIN(),BIN_TO_UUID()和IS_UUID()。MySQL并没有特殊的IPv6和UUID数据类型,而是以VARBINARY(16)数据类型保存的。
持续性的全局变量
可以用SET PERSIST来设置持久性的全局变量,即便服务器重启也会保持下来。
性能数据库Performance Schema的改进
比如对性能数据库增加了100多个索引,可以检索更快。
重构SQL分析器
持续不断的逐步改进SQL分析器。旧的分析器由于其语法复杂性和自顶向下的分析方式从而有严重的限制,导致难以维护和扩展。
成本模型
InnoDB缓冲区现在可以估算主内存缓存区中的有多少表和索引,这可以让优化器选择访问方式时知道数据是否可以存储在内存中还是必须存储到磁盘上。
直方图Histograms
通过使用直方图,用户或DBA可以对数据分布进行统计,这可以用于查询优化以寻找优化的查询方案。
改进扫描性能
改进了InnoDB范围查询的性能,可提升全表查询和范围查询5-20%的性能。
重构BLOB
重构BLOB加速了片段读取/更新操作,可以加速JSON数据的操作。
持久化自增值
InnoDB会持久化保持自增序列的最大值到redo日志中。这个改进还修复了一个非常老的199号bug。
临时表
取消对压缩临时表的支持,并存储临时表的元数据到内存中。
其它的更多重要改进和细节,请参考MySQL 8.0.0发布公告[1]和这里[2]。
下载
目前8.0.0还是开发版本,如果你希望体验和测试最新特性,可以从dev.mysql.com[3]下载各个平台的安装包。不过,MySQL软件包是越来越大了,Linux平台上的二进制打包后就将近有1 GB。如果在产品环境中使用,在8.0没有进入稳定版本之前,请继续使用5.7系列,当前最新的版本是5.7.15 GA版本——这只有600 M多。
最新的源代码放在GitHub上,感兴趣的朋友可以去看看,其中有不少是中国人的贡献。
[1]: http://dev.mysql.com/doc/relnotes/mysql/8.0/en/
[2]: http://mysqlserverteam.com/the-mysql-8-0-0-milestone-release-is-available/