MySQL8.0发布后的变化

简述

我认为,即使数据库的主要版本升级了,业务也不会立即采用,
但既然它已经方便地进化了,不使用它就很可惜。
总之,我将其总结为先理解内容,等待使用机会的态度。

当然在官方上有特点的描述,但是我认为并不太关注”~很快!”这样的内容,因为它依赖于使用环境等因素。
更有兴趣的是”能够做的事情”和”不能做的事情”,实际上也应该是选择数据库时的判断标准之一。

以下所述是与过去版本进行比较的内容。

MySQL8.0有哪些新功能?

CTE(公共表达式):已启用使用WITH句。

作为一个原本就使用PostgreSQL的人来说,我很高兴使用With子句可以解决SQL编写时的嵌套地狱问题。
(虽然其他关系型数据库中已经实现了这个功能,但是MySQL直到现在还没有实现。)

当在编辑器中编写SQL时,尽管我会尽力通过换行和空格使其更易读,但当嵌套层级增加时,很难保持表格的清晰可见,因此非常感激。

窗口函数可用。

在聚合计算时使用SQL可以实现复杂的Select语句简洁化,非常方便。
个人而言,我觉得使用FIRST_VALUE()和RANK()非常便利,我以前也经常借助它们。
对于RDB的初学者或者不熟悉的人来说,可能会对”窗口函数”这个概念感到迷惑,不太理解在说什么(我以前也是这样)。因此,盲目地过度使用可能会成为一个问题。

权限管理可以按角色单位进行。

如果在使用保守角色,也就是明确的服务器和基础设施管理方面做得很好,那是相当方便的。当多个用户或系统共享同一数据库时,如果每个用户都需要单独设置权限,那很容易发生意外,所以这非常方便。我反倒觉得,为什么之前没有这个功能呢。

添加文档存储

这样就不需要额外准备NoSQL文档数据库了。
感觉就像将NoSQL功能添加到RDB中一样,但实际可操作性还不够明确。
乍一看,似乎能够在一个数据库中管理两种功能,减轻负担,但对于规模较小或试用情况除外,最终还是觉得像MySQL+Cassandra那样将它们分开更适合实际运营。
因为RDB和NoSQLDB应该有各自不同的角色,我认为将它们分工合作会提高整个系统的性能。

加强JSON支持

添加了像JSON_TABLE函数这样的功能,它接收JSON数据并将其返回为关系表。
由于处理JSON数据的系统变得越来越普遍,这可能是不可避免的,但对我个人而言,我还没有完全掌握这些技巧,所以感受不深。
(即使在MySQL中不强制使用JSON,也可以同时使用其他NoSQL数据库。如果要将数据保存到关系数据库中,则解析JSON并将所需值保存到各自适当的类型可能更容易管理。)

地理信息系统(GIS):支持空间参考系统(SRS)

经常使用纬度和经度在地图上标记点是很常见的,这样位置的计算和管理就更容易了,这确实是件好事。虽然知道它很方便,但我自己也没有完全掌握,所以感觉没有太大的激动。(如果有方便的例子,我想了解一下。)

MySQL 8.0 不再支持的功能

取消查询缓存

这是一个可以将执行过的SQL和其结果缓存到内存中,并在下次遇到相同SQL时使用以提高速度的功能,但看起来已经被弃用了。
如果是要使用新版本可能没有问题,但如果升级版本后,如果在之前版本中使用了这个功能,似乎会导致应用程序无法启动。
如果不知道这个情况,可能会遇到问题。

弃用古老的TIME类型和TIMESTAMP类型。

古老的TIME型和TIMESTAMP型好像被废止了,如果有适用的情况,似乎需要更改数据类型。(参考)

个人的想法

因为我在MySQL5.6转换到MySQL5.7时非常谨慎,所以不确定什么时候会开始使用MySQL8.0,但我希望能尽快尝试一下。
暂时只会在本地环境的个人应用程序中使用,等我注意到的时候可能就已经有新版本发布了。

广告
将在 10 秒后关闭
bannerAds