MySQL 9.1 是全球最受欢迎的开源关系数据库管理系统(RDBMS)之一,广泛应用于各种规模的企业中。此次新版本的发布引入了诸多新的功能、重要的优化改进以及一些功能的弃用。MySQL 9.1 的重点更新包括改进的触发器处理方式、优化的 EXPLAIN
命令输出、增加对 OpenID Connect 认证的支持、崩溃安全的数据库操作等,极大地提升了性能、灵活性和安全性。
• 发布说明:
https://dev.mysql.com/doc/relnotes/mysql/9.1/en/news-9-1-0.html
一、触发器处理的重大改进
在 MySQL 的早期版本中,触发器的处理方式存在较大问题。当表被访问时,即使是只读操作如 SELECT
,与该表关联的触发器也会被完整加载和解析。这不仅消耗了不必要的内存资源,还会对查询执行时间造成影响,尤其是在有大量触发器的场景中。
为了优化触发器的性能,MySQL 9.1 引入了全新的触发器处理机制。触发器现在分为两个阶段处理:
• 元数据读取阶段:当表被访问时,MySQL 首先只读取触发器的元数据,而不对触发器进行完整的解析。
• 延迟解析阶段:触发器只有在实际需要时(例如执行
INSERT
、UPDATE
等修改数据的操作时)才会被完整解析。
这种新的处理方式大大减少了只读查询的资源消耗,并有效提高了数据库的整体性能。
为了配合这一改进,MySQL 9.1 还引入了新的服务器状态变量,用于监控触发器缓存的使用情况。新的变量包括:
•
Table_open_cache_triggers_hits
:表示触发器缓存命中次数。•
Table_open_cache_triggers_misses
:表示触发器缓存未命中的次数。
这些新变量为数据库管理员提供了更多关于触发器性能的洞察,并帮助优化数据库配置。
二、EXPLAIN
命令的增强
EXPLAIN
命令是 MySQL 中分析查询执行计划的重要工具,在 MySQL 9.1 中,EXPLAIN
命令的输出得到了显著增强,进一步提升了开发者和数据库管理员对查询性能的可见性。
EXPLAIN
现在可以提供更详细的关于多范围读取(Multi-Range Reads, MRR)的信息,帮助用户更好地理解 MySQL 如何在处理范围查询时优化磁盘读取操作。这在处理大量范围查询时,尤其是需要从磁盘中读取多个不连续数据块的情况下,显得尤为重要。
新的 EXPLAIN
输出还可以更清楚地显示 MySQL 使用的半连接(Semi-Join)策略。在复杂的连接查询中,半连接策略有助于减少返回的行数,从而加速查询。通过在 EXPLAIN
中展示这一信息,开发者能够更加明确地调整 SQL 语句,优化查询性能。
为了提高查询计划的可读性,MySQL 9.1 还对 EXPLAIN
输出中的条件字符串进行了统一格式化。这一更新使得开发者能够更加轻松地解析复杂查询中的条件表达式,从而快速识别和优化潜在的性能瓶颈。
三、CREATE VIEW IF NOT EXISTS
子句
MySQL 9.1 中的一个实用性增强是 CREATE VIEW
语句的 IF NOT EXISTS
子句支持。这一新增功能允许用户尝试创建视图,而无需担心视图是否已存在。如果视图已存在,MySQL 会返回一个警告,而不是抛出错误。
这一功能极大简化了开发者和管理员的操作流程,尤其是在自动化脚本中,这可以防止由于视图已存在而导致的脚本执行失败,提升了数据库操作的鲁棒性。
四、崩溃安全的数据库操作
MySQL 9.1 引入了崩溃安全的 CREATE DATABASE
和 DROP DATABASE
语句,这些操作现在可以在支持原子DDL(数据定义语言)操作的存储引擎(如 InnoDB)中被视为事务处理。
在数据库创建或删除过程中,如果出现服务器意外关闭或错误,传统的数据库系统可能会导致数据库处于不一致状态。通过支持崩溃安全的数据库操作,MySQL 9.1 确保了即使在服务器崩溃的情况下,数据库的一致性也能得到保障。
这对于需要高可用性和数据一致性的生产环境来说,是一个重大改进,有助于降低意外中断带来的风险。
五、JavaScript 存储程序中的 VECTOR 数据类型
MySQL 9.1 在 JavaScript 存储程序中新增了对 VECTOR 数据类型的支持,这意味着存储过程中的输入和输出参数现在可以使用 VECTOR 值。这一更新对于依赖复杂向量计算的应用程序(如科学计算、机器学习等)尤为有用,极大提升了 MySQL 在处理高级数学和统计运算时的能力。
六、企业版功能:复制应用程序度量指标
对于使用 MySQL 企业版的用户,MySQL 9.1 引入了新的复制应用程序度量指标。这些新的指标为管理员提供了更高的可见性,使得复制过程的监控和故障排查更加轻松。
通过这些指标,管理员可以实时监控复制进程的进展、复制滞后情况,并收集有用的统计数据。这将极大提高复制环境的稳定性,帮助管理员提前发现潜在问题并进行优化。
七、OpenID Connect 支持
为了增强身份认证的灵活性,MySQL 9.1 企业版引入了对 OpenID Connect 的支持。这一新增功能允许 MySQL 集成现代的单点登录(SSO)系统,使得用户管理更加简单和高效,尤其是在大规模企业环境中。
通过 OpenID Connect,MySQL 可以与流行的身份验证平台(如 Google、微软 Azure Active Directory 等)无缝集成,简化用户认证过程,增强系统的安全性。
八、Option Tracker 组件
MySQL 9.1 企业版还引入了一个新的组件——Option Tracker。该组件能够监控 MySQL 服务器上的选项,包括与已安装插件和组件相关的选项。通过 Option Tracker,管理员可以轻松查看服务器上启用的所有选项配置,从而快速识别并调整可能的配置错误。
这一组件的推出使得 MySQL 服务器的管理更加简化和透明,有助于确保服务器的运行环境符合最佳实践。
九、功能弃用与移除
与往常一样,每个新的 MySQL 版本都会伴随一些功能的弃用和移除。MySQL 9.1 也不例外,一些旧的功能被标记为弃用,开发者和管理员需要尽早调整应用程序,以适应未来的版本更新。
弃用功能
MySQL 9.1 中有一些功能被标记为“弃用”,这意味着这些功能在未来的版本中将被移除。开发者应避免在新项目中使用这些功能,并逐步替换现有项目中的使用。
移除的功能
除了弃用功能,MySQL 9.1 已经完全移除了部分功能。数据库管理员在升级到 MySQL 9.1 前应仔细审查现有项目和数据库配置,确保不会因为功能移除导致不兼容问题。