本文共 4081 字,大约阅读时间需要 13 分钟。
1. 版本分类
MySQL 的主要版本可以分为以下几类:
- 官方版本:由 Oracle 发布的社区版(Community Edition)和商业版(Enterprise Edition).
- 分支版本:由社区或其他公司基于 MySQL 开发的衍生版本,例如 MariaDB、Percona Server.
- 主要版本号:例如 5.7、8.0,代表大的功能迭代.
- 次要版本号:例如 8.0.34,表示 bug 修复或小功能增强.
2. 官方版本对比
2.1 社区版(Community Edition)
- 特点:免费开源,所有人都可以使用和修改.
- 适用场景:中小型企业、开发环境.
- 限制:
- 不提供官方技术支持.
- 缺少高级功能(如备份、加密等商业功能).
2.2 企业版(Enterprise Edition)
- 特点:付费版,提供完整功能和技术支持.
- 优势:
- 包括备份工具(MySQL Enterprise Backup).
- 提供高级安全功能,如数据加密、审计日志等.
- 提供性能监控和调优工具(MySQL Enterprise Monitor).
- 适用场景:大型企业、高安全性需求场景.
3. 主要版本对比
3.1 MySQL 5.6
- 发布时间:2013 年.
- 新特性:
- InnoDB 存储引擎优化:支持全文索引.
- 复制功能增强:支持 GTID(全局事务 ID),改进主从复制.
- 性能优化:改进查询优化器.
- 适用场景:适用于中小型业务,但已经较为过时.
3.2 MySQL 5.7
- 发布时间:2015 年.
- 新特性:
- JSON 数据支持:增加 JSON 数据类型和相关函数.
- 性能优化:支持虚拟列和生成列,改进查询性能.
- 复制增强:改进并行复制.
- 安全性提升:默认支持 SSL 和密码强度策略.
- 适用场景:适用于大部分应用场景,仍被广泛使用.
3.3 MySQL 8.0
- 发布时间:2018 年.
- 主要改进:
- 字符集改进:默认字符集改为 UTF-8(utf8mb4),更好支持多语言.
- 窗口函数:支持窗口函数和公共表表达式(CTE).
- JSON 增强:添加更多 JSON 函数.
- 数据持久性:采用 redo log 刷新机制,提升崩溃恢复性能.
- 性能优化:改进索引管理(如不可见索引),支持 Hash Join.
- 安全性:增强了密码管理和权限系统.
- 适用场景:现代化业务系统,特别是需要复杂查询和多语言支持的场景.
4. 衍生版本对比
4.1 MariaDB
- 背景:由 MySQL 创始人开发,基于 MySQL 分支,旨在保持开源.
- 特点:
- 提供更快的查询性能和更多存储引擎支持(如 Aria、TokuDB).
- 兼容 MySQL,但部分功能和语法有差异.
- 适用场景:关注开源生态的企业.
4.2 Percona Server
- 特点:
- 基于 MySQL 社区版开发,增加了企业级特性(如更强的备份和监控).
- 专注于性能和高可用性.
- 适用场景:需要高性能和高稳定性的场景.
6. MySQL 5.7 对 JSON 的“部分支持”
6.1 MySQL 5.7 对 JSON 的支持
JSON 数据类型: - 提供了原生的
JSON
数据类型,可以存储 JSON 格式的数据,保证数据的语法正确性. - 底层会对 JSON 数据进行二进制优化存储,比字符串存储更高效.
JSON 函数: - 提供了一些基本的 JSON 操作函数,例如:
JSON_EXTRACT(json_doc, path)
:从 JSON 中提取指定路径的值. JSON_UNQUOTE(json_doc)
:去掉 JSON 值中的引号. JSON_ARRAY(elements)
:创建 JSON 数组. JSON_OBJECT(key, value)
:创建 JSON 对象.
- 索引支持:
- MySQL 5.7 支持在 JSON 数据中提取的字段上创建虚拟列(Generated Columns),从而间接支持索引.
7. 窗口函数是什么?
7.1 窗口函数的基本特点
不会折叠结果集: - 与聚合函数不同,窗口函数的计算不会减少结果集的行数.
- 例如,在一个包含 100 行的表中应用窗口函数,结果仍然是 100 行.
窗口定义: - 通过
OVER()
子句定义一个窗口(数据范围),可以指定分组和排序条件. PARTITION BY
:定义分组范围. ORDER BY
:指定计算的顺序.
7.2 常见的窗口函数
排名函数: RANK()
:返回排名,跳过相同值的排名. DENSE_RANK()
:返回排名,但不会跳过相同值的排名. ROW_NUMBER()
:返回行号.
聚合函数扩展: SUM() OVER()
、AVG() OVER()
等,对窗口中的数据进行聚合计算.
偏移函数: LAG(column, offset)
:返回当前行之前某一行的值. LEAD(column, offset)
:返回当前行之后某一行的值.
其他函数: NTILE(n)
:将结果分为 n 组,并返回每行所属的组号.
7.3 MySQL 5.7 的局限性
MySQL 5.7 不支持窗口函数,需要通过复杂的子查询或用户定义变量模拟窗口函数的行为。
7.4 MySQL 8.0 的改进
MySQL 8.0 原生支持窗口函数,语法简单高效,适合数据分析和复杂查询场景。
转载地址:http://dsbfk.baihongyu.com/