不过这次发布的 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/[tinymediumlong]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/
[3]: http://dev.mysql.com/downloads/mysql/
