注:6.0版本号已被用过,7.x版本用于NDB Cluster,因而新版本号从8.0开始了。
在被收购后,MySql创始人Monty又搞了一个MariaDB版本,MySQL 8.0发布后,MariaDB宣布不打算继续合并InnoDB引擎。下面我们来看看8.0都带给我们什么新的特性吧!
截止到目前,8.0版本的MySql被万众期望,可以堪称是最强的MySQL。
在很多人眼里,MySQL 8.0 有了一个很好的参照物,很多新特性是依据Oracle中的特征改进的。在我看来,Oracle作为很牛的数据库系统,已经表现出了这些技术的优秀之处,为什么不拿来使用呢?
MySQL 8.0无论在功能还是性能(整体上),都是目前最好的MySQL版本。以往因为某些特性不支持,导致需要在业务代码、逻辑上做一些妥协,甚至增加使用第三方解决方案(例如NOSQL)。
相信从8.0开始,以后这种情况会越来越少的,MySQL会越来越好,绝大多数和数据库相关的业务需求,都能在MySQL中完成。
一、性能优化(查询、索引)
- hash join 关联查询:有了hash join再也不那么怕没索引的多表join了;还有:anti join
- 快速加新列
- 直方图
- 函数索引、表达式索引
- 消除了全局的buffer pool mutex。此特性Percona数据库好像在5.5版本就有了
- 倒序索引
- 不可见索引,将索引改为不可见后,表示此索引不生效,需要的时候可以再改回来
- 引入WRITESET模式,大大提高并行复制效率,主从复制延迟进一步缩小
- 针对JSON数据类型,增加Multi-valued indexes,更方便JSON的搜索了
- HINT语法增强,更方便在执行查询时动态设定选项,针对不同SQL采用不同策略
- 有个新的TempTable引擎,比原来的tmptable强不少
- 其他性能相关的优化
二、管理、复制、安全方面的功能提升
- 正式推出Group Replication。很好,在稳步朝着高性能、高可用方向推进,先实现读可扩展,再实现写可扩展。期待不远的将来再实现分布式Sharding,到那时候,现在市面上那些吹得不可一世的NEWSQL们该哑火了,这两年有点憋屈的说。
- Clone Plugin以及ReplicaSet特性,配合MySQL Shell,想要部署一个新的slave实例,或者是InnoDB Cluster节点,就方便很多了
- sqlrequireprimary_key选项设定强制要求每个表都得有个主键
- 实例重启后的自增ID持久化,小增强却解决了业务上的逻辑大麻烦
- extra admin port,管理员可以给自己开后门了
- 在线修改完配置参数后,SET PERSIST语法实现持久化,不用再手工修改一次my.cnf了
- 锁增强,增加SKIP LOCK、NOWAIT LOCK锁模式,以及BACKUP LOCk
- 窗口函数、CTE。做统计分析可以非常方便
- 其他相关管理、复制、安全方面的提升