MySQL8.0即将发布,一起来看看都有什么料。
昨天就收到了官方发给ACEs的邮件,不过今天白天一直在忙着给新房子做保洁,没来得及认真查看邮件内容,只是简单扫了一眼,整体感觉还是有很多惊喜,不过也大体上在意料之中。
重大变更彻底将数据字典表引擎从MyISAM改为InnoDB。显然地,这是要更进一步放弃MyISAM引擎的节奏,还在负隅顽抗的亲们,要认清形势了,哈哈。事实上,我当初的预期是在5.7就该这么做的。
增加了ROLE特性。这是继续向ORACLE看齐啊,我个人没啥特别感觉。
修改默认字符集为utf8mb4。这个,见仁见智吧,各有喜好,不管怎样,也算是紧跟着时代发展的决定了。
新增INVISIBLE(不可见)索引属性。可将一个索引设置为不可见,那么查询优化器不再识别该索引。这么做的用意是,方便DBA判断某个索引过一阵子是否可以删除,不再担心误杀。
位运算功能增强。以前只能针对INT类型做位运算,现在增加支持二进制类型的运算,比如[VAR]BINARY/[TINY
MEDIUM
LONG]BLOB等多种类型。另外,也支持对IPV6和UUID类型的位运算。
在线修改全局选项(GLOBALVARIABLES)时,增加PERSIST关键字后,可以将该调整持久化,即便实例重启。这就可以避免了在线修改某些选项后,忘了同时修改my.cnf,造成了实例重启后,这个修改又被恢复原样的问题。这个功能显然也是在学习ORACLE的控制文件做法呀。
增强P_S(performance_schema)功能,主要有几点:
可以在P_S中直接查看错误日志;
在P_S中增加了类似自适应哈希索引的索引机制,便于快速检索P_S中的数据;
在线修改全局选项(GLOBALVARIABLES)时,增加PERSIST关键字后,可以将该调整持久化,即便实例重启。这就可以避免了在线修改某些选项后,忘了同时修改my.cnf,造成了实例重启后,这个修改又被恢复原样的问题。这个功能显然也是在学习ORACLE的控制文件做法呀。
重构SQL解析器。简单来说,原先的解析器有严重的问题,维护性、扩展性都不好,在8.0里进行了重构,以后会做的更牛逼。
查询优化器Hints功能增强。在5.6及更早版本中,子查询中的派生表总是要进行物化,效率很低。从5.7开始,优化器会根据情况进行判断,自行决定在哪些情形下需要物化,哪些直接合并进外部查询中,通常来说,后一种做法效率会搞很多。在8.0中,可以在SQL中增加/*+merge*/关键字来决定哪些情形下将派生表合并到外部查询中以提升查询效率。
查询优化器功能增强。它会判断InnoDBBuffer中数据、索引缓冲比例的情况,决定每个SQL的访问模式,尽量避免发生物理读。
增加直方图功能。不知道直方图什么意思的话,可以了解下MariaDB分支中的QUERYRESPONSETIME这个插件的功能,和这个基本相似。又是学习ORACLE的做法呀,汗(⊙﹏⊙)b
GIS功能增强。增加了经度、纬度、平面地图等功能。
提高数据扫描查询效率。例如下面这样的SQL大概能有5-20%的效率提升:
SELECT*FROMt;
或是
SELECT*FROMtWHEREpkBETWEENAND0;
增强InnoDB引擎中部分读取或更新BLOB数据类型的效率。
InnoDBMemcached功能增强,增加一次取多个值(mget),以及范围搜索。
修复了InnoDB重启后,自增值丢失的bug,这个bug历史非常悠久(bugid是,可想而知,嗯...)。
会对那些损坏的数据页加上标记,数据库实例在进行recovery时,就会忽略这些page了。
临时表增强。首先,将压缩类型临时表映射成未压缩格式。其次,将临时表的元数据存储在内存中。
InnoDB性能大幅提升,主要做了几个事情:
可以把想通tableID组内的undo数据批量purge;
废除bufferpoolmutex。将原来一个mutex拆分成多个,提高并发;
拆分LOCK_thd_list和LOCK_thd_remove这两个mutex,大约可提高线程链接效率5%。
MySQL复制功能方面的改进或提升不多,这个让我非常诧异,我也就没写出来了。
写到凌晨一点半,实在有点累(开头说过,今天做了一天保洁)。其他更多新特性,我大概过了一眼,好像不是太有诱惑性,这次就先不列出来了。
毕竟,现在还只是prerelease,在后续的计划中,肯定还会发生很大变化。比如这次就完全没提到groupreplication,也压根没提到之前广大中国MySQL用户提交给官方的新功能需求,汗一个(⊙﹏⊙)b
再小小吐槽下,安装包真的是是越做越大了,建议官方发布的时候,再提供一个strip过后的二进制包吧,下载起来更快一些~~~
好了,先到这里,下次再扯。
叶金荣