MySQL 8版本的新功能和改进有哪些?(MySQL收藏版)

目录

1. 简单介绍

2. 发展历史

3. MySQL 8产品特性

4. 数据库性能重点分析

1. 原生 JSON 支持改进

2. 隐式列优化

3. 改进的查询优化器

4. 并行查询

5. 分区表改进


MySQL 是一个流行的开源关系型数据库管理系统(RDBMS),由瑞典公司 MySQL AB 于 1995 年开发并首次发布。

如果需要测试以下的SQL语句,可以选用MySQL Workbench或SQLynx来操作。

以下是对 MySQL 的简单介绍:

1. 简单介绍

关系型数据库管理系统:MySQL 采用了关系型数据库模型,使用表格存储数据,并通过 SQL(结构化查询语言)来管理和查询数据。

开源软件:MySQL 是一个开源项目,遵循 GNU 通用公共许可证(GPL)。这意味着用户可以自由下载、使用和修改 MySQL。

2. 发展历史

  • 1995 年:MySQL 由 MySQL AB 首次发布,最初由 Michael Widenius 和 David Axmark 开发。
  • 2008 年:MySQL 被 Sun Microsystems 收购。
  • 2010 年:Oracle 收购了 Sun Microsystems,从而获得了 MySQL 的所有权。
  • 2013 年:MySQL 5.6 版本发布,包含了许多性能和可扩展性方面的改进。
  • 2015 年:MySQL 5.7 版本发布,进一步提升了性能、可靠性和管理功能。
  • 2018 年:MySQL 8.0 版本发布,引入了许多新的特性和优化,包括原生 JSON 支持、窗口函数和 CTE(公共表表达式)。

3. MySQL 8产品特性

下面是 MySQL 8.0 主要新特性和改进的表格展示:

特性分类新特性/改进说明
数据库性能和优化原生 JSON 支持改进增加更多 JSON 函数和操作符,提升 JSON 数据处理效率
隐式列优化通过隐式列优化查询性能,特别是窗口函数和复杂子查询
改进的查询优化器引入基于直方图的统计信息等优化策略,提升查询执行计划选择和性能
安全性默认强密码插件默认启用更强的密码验证插件(caching_sha2_password),增强安全性
增强的审计日志提供更详细的日志记录和更好的日志管理功能
管理和监控数据字典的统一管理通过 InnoDB 表存储元数据,提升元数据管理效率和一致性
改进的错误日志引入结构化的错误日志格式,便于解析和分析,提升问题排查效率
可在线更改的配置参数增加更多动态参数,允许在运行时更改配置,无需重启数据库
高可用性和复制InnoDB 集群支持 InnoDB 集群,通过 Group Replication 提供高可用性解决方案
多源复制支持从多个主库进行复制,提升数据整合的灵活性和可靠性
GTID 复制改进改进基于全局事务标识符(GTID)的复制,提升复制的灵活性和容错能力
SQL 和 NoSQL 互操作性增强的 GIS 支持提升对地理信息系统(GIS)数据类型和函数的支持
集成全文搜索改进全文搜索功能,提升搜索速度和准确性
分区表改进改进分区表管理和性能,支持更多分区类型和操作
开发者友好性窗口函数和公用表表达式(CTE)引入窗口函数和递归公用表表达式(CTE),增强复杂查询的表达能力
改进的 JSON 函数增加 JSON_TABLEJSON_ARRAYAGGJSON_OBJECTAGG 等函数
默认字符集 utf8mb4将默认字符集更改为 utf8mb4,支持更广泛的字符集,增强国际化支持
可扩展性和大数据支持改进的并行查询支持并行执行查询,提升大数据集上的查询性能
压缩和加密引入更高效的数据压缩和加密机制,提升存储效率和数据安全性

这些新特性和改进使得 MySQL 8.0 在性能、安全性、管理和开发者友好性等方面都有了显著提升,满足了现代应用对数据库的更高要求。

4. 数据库性能重点分析

以下是 MySQL 8.0 在数据库性能优化方面的一些详细例子和说明:

1. 原生 JSON 支持改进

示例:

假设有一个存储了客户订单信息的 JSON 字段,我们需要提取每个订单的详细信息:

CREATE TABLE orders (id INT AUTO_INCREMENT PRIMARY KEY,order_details JSON
);INSERT INTO orders (order_details) VALUES
('{"customer": "John Doe", "items": [{"name": "Laptop", "price": 1200}, {"name": "Mouse", "price": 25}]}'),
('{"customer": "Jane Smith", "items": [{"name": "Phone", "price": 800}, {"name": "Headphones", "price": 100}]}');-- 使用 JSON_TABLE 提取订单详细信息
SELECT id, customer,item_name, item_price
FROM orders,JSON_TABLE(order_details, '$.items[*]' COLUMNS (customer VARCHAR(50) PATH '$.customer',item_name VARCHAR(50) PATH '$.name',item_price DECIMAL(10, 2) PATH '$.price')) AS items;

此查询利用 JSON_TABLE 函数将 JSON 数据拆解成关系表格式,提高了数据查询和处理的效率。

2. 隐式列优化

示例:

假设我们有一张销售记录表,需要按销售额排名:

CREATE TABLE sales (id INT AUTO_INCREMENT PRIMARY KEY,salesperson VARCHAR(50),amount DECIMAL(10, 2)
);INSERT INTO sales (salesperson, amount) VALUES
('Alice', 5000),
('Bob', 3000),
('Charlie', 7000),
('David', 6000);-- 使用 ROW_NUMBER 函数为每个销售人员按销售额排名
SELECT salesperson,amount,ROW_NUMBER() OVER (ORDER BY amount DESC) AS rank
FROM sales;

此查询使用 ROW_NUMBER 窗口函数计算销售人员的排名,避免了复杂的子查询,提高了查询性能。

3. 改进的查询优化器

示例:

假设我们有两张表 employeesdepartments,需要查询每个部门的员工数量:

CREATE TABLE departments (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50)
);CREATE TABLE employees (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),department_id INT,FOREIGN KEY (department_id) REFERENCES departments(id)
);INSERT INTO departments (name) VALUES ('HR'), ('Sales'), ('IT');
INSERT INTO employees (name, department_id) VALUES ('Alice', 1), ('Bob', 2), ('Charlie', 3), ('David', 2);-- 查询每个部门的员工数量
SELECT d.name AS department_name, COUNT(e.id) AS employee_count
FROM departments d
LEFT JOIN employees e ON d.id = e.department_id
GROUP BY d.name;

改进的查询优化器利用更精确的统计信息和优化策略,生成更高效的执行计划,提高了查询性能。

4. 并行查询

示例:

在一个大数据集上执行并行查询:

-- 创建一个包含大量数据的表
CREATE TABLE large_table (id INT AUTO_INCREMENT PRIMARY KEY,data VARCHAR(255)
);-- 假设表 large_table 包含数百万行数据
-- 使用并行查询提高性能
SELECT COUNT(*)
FROM large_table
WHERE data LIKE '%search_term%';

并行查询通过将大查询分解为多个小任务并行执行,提高了处理大数据集时的查询性能。

5. 分区表改进

示例:

假设我们有一个包含大量销售数据的表,按月份进行分区:

CREATE TABLE sales_data (id INT AUTO_INCREMENT PRIMARY KEY,sale_date DATE,amount DECIMAL(10, 2)
)
PARTITION BY RANGE (YEAR(sale_date)) (PARTITION p2020 VALUES LESS THAN (2021),PARTITION p2021 VALUES LESS THAN (2022),PARTITION p2022 VALUES LESS THAN (2023)
);-- 查询 2021 年的销售数据
SELECT SUM(amount)
FROM sales_data
WHERE sale_date BETWEEN '2021-01-01' AND '2021-12-31';

通过对销售数据表进行分区,查询特定年份的数据时只需扫描相关分区,提高了查询性能和数据管理的效率。

以上示例展示了 MySQL 8.0 在性能优化方面的实际应用,提高了查询效率,增强了数据库的整体性能,使其更适合现代应用的需求。

后续会根据实际的应用场景分别在不同的情况下做MySQL的新特点分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/33772.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

了解SD-WAN与传统WAN的区别

近年来,许多企业选择了SD-WAN作为他们的网络解决方案。云基础架构的SD-WAN不仅具备成本效益,而且提供更安全、更可靠的WAN连接,有助于实现持续盈利。客户能够更好地控制他们的网络,个性化定制且无需额外成本。 那么,为…

服务器数据恢复—raid故障导致部分分区无法识别/不可用的数据恢复案例

服务器数据恢复环境: 一台某品牌DL380服务器中3块SAS硬盘组建了一组raid。 服务器故障: RAID中多块磁盘出现故障离线导致RAID瘫痪,其中一块硬盘状态指示灯显示红色。服务器上运行的数据库在D分区,备份文件存放在E分区。由于RAID瘫…

[信号与系统]模拟域中的一阶低通滤波器和二阶滤波器

前言 不是学电子出身的,这里很多东西是问了朋友… 模拟域中的一阶低通滤波器传递函数 模拟域中的一阶低通滤波器的传递函数可以表示为: H ( s ) 1 s ω c H(s) \frac{1}{s \omega_c} H(s)sωc​1​ 这是因为一阶低通滤波器的设计目标是允许低频信…

05-java基础——循环习题

循环的选择:知道循环的次数或者知道循环的范围就使用for循环,其次再使用while循环 猜数字 程序自动生成一个1-100之间的随机数,在代码中使用键盘录入去猜出这个数字是多少? 要求:使用循环猜,一直猜中为止…

时序预测 | Matlab基于CNN-BiLSTM-Attention多变量时间序列多步预测

目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab基于CNN-BiLSTM-Attention多变量时间序列多步预测; 2.多变量时间序列数据集(负荷数据集),采用前96个时刻预测的特征和负荷数据预测未来96个时刻的负荷数据&…

品牌为什么需要3D营销?

在对比传统品牌营销手段时,线上3D互动营销以其更为生动的展示效果脱颖而出。它通过构建虚拟仿真场景,创造出一个身临其境的三维空间,充分满足了客户对实体质感空间的期待。不仅如此,线上3D互动营销还能实现全天候24小时无间断服务…

PyTorch中“No module named ‘torch._six‘“的报错场景及处理方法

🎬 鸽芷咕:个人主页 🔥 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想,就是为了理想的生活! 引入 在使用PyTorch时,您可能会遇到"No module named ‘torch._six’"的错误。这通常是因为PyTorch的某些…

来自工业界的知识库 RAG 服务(五),模块化知识库 GoMate 实现方案详解

背景介绍 很早以前就看过一篇介绍 RAG 的综述性文章 Retrieval-Augmented Generation for Large Language Models: A Survey, 其中介绍了 RAG 的模块化架构: 但是一直没有看到对应的实现方案,以前也没有理解此框架的优势之处。随着在相关领域的持续实…

门店通微信小程序系统源码

📱:便捷购物新选择 🏢一、什么是门店通微信小程序? 随着移动互联网的快速发展,微信小程序成为了我们日常生活中不可或缺的一部分。门店通微信小程序是一款集合了多家门店信息、服务、优惠等功能于一体的工具&#xf…

centos 安装deb格式安装包

背景 研发给了我一个deb包,需要我在centos 这种服务器操作系统上安装... deb包安装一般是使用dpkg -i xxxx.deb 命令,dpkg是Debian类型的系统,但是 通常centos是没有dpkg命令的... 直接就报:bash dpkg 未找到命令... 本来找研发给我编译rp…

SpringCloud Alibaba Sentinel规则持久化实践总结

默认情况下&#xff0c;一旦我们重启应用&#xff0c;sentinel规则将消失&#xff0c;生产环境需要将配置规则进行持久化。这里我们实践将Sentinel持久化到Nacos中。 ① pom依赖 我们引入sentinel-datasource-nacos&#xff1a; <dependency><groupId>com.aliba…

游戏AI的创造思路-技术基础-深度学习(5)

继续深度学习技术的探讨&#xff0c;填坑不断&#xff0c;头秃不断~~~~~ 3.5. 自编码器&#xff08;AE&#xff09; 3.5.1. 定义 自编码器&#xff08;Autoencoder, AE&#xff09;是一种数据的压缩算法&#xff0c;其中压缩和解压缩函数是数据相关的、有损的、从样本中自动学…

[ios逆向]查看ios安装包ipa签名证书embedded.mobileprovision解密 附带解密环境openssl

openssl smime -inform der -verify -noverify -in embedded.mobileprovision 解密embedded.mobileprovision文件 链接&#xff1a;https://pan.baidu.com/s/1UwNOWONKV1SNj5aX_ZZCzQ?pwdglco 提取码&#xff1a;glco –来自百度网盘超级会员V8的分享 可以使用everything 查看…

matlab绘制二维曲线,如何设置线型、颜色、标记点类型、如何设置坐标轴、matlab 图表标注、在图中标记想要的点

matlab绘制二维曲线&#xff0c;如何设置线型、颜色、标记点类型、如何设置坐标轴、matlab 图表如何标注、如何在图中标记想要的点 matlab绘制二维曲线&#xff0c;如何在图中标记想要的点。。。如何设置线型、颜色、标记点类型。。。如何设置坐标轴。。。matlab 图表标注操作…

计算机系统基础知识(上)

目录 计算机系统的概述 计算机的硬件 处理器 存储器 总线 接口 外部设备 计算机的软件 操作系统 数据库 文件系统 计算机系统的概述 如图所示计算机系统分为软件和硬件&#xff1a;硬件包括&#xff1a;输入输出设备、存储器&#xff0c;处理器 软件则包括系统软件和…

山东大学-科技文献阅读与翻译(期末复习)(选择题+翻译)

目录 选择题 Chapter1 1.which of the following is not categorized as scientific literature 2.Which of the followings is defined as tertiary(三级文献) literature? 3.Which type of the following international conferences is listed as Number one conference…

如何做好药店布局,实现客流回归?

随着我国医药市场的不断发展&#xff0c;药店数量逐年增多&#xff0c;竞争愈发激烈。在这种背景下&#xff0c;如何做好药店布局&#xff0c;吸引客流回归&#xff0c;成为药店经营者关注的核心问题。 要想实现店铺形象美观大方、有效引导客流动向&#xff0c;增加顾客在店内…

TDengine 推出新连接器,与 Wonderware Historian 无缝连接

在最新发布的TDengine 3.2.3.0 版本中&#xff0c;我们进一步更新了 TDengine 的数据接入功能&#xff0c;推出了一款新的连接器&#xff0c;旨在实现 Wonderware Historian&#xff08;现称为 AVEVA Historian&#xff09;与 TDengine 的集成。这一更新提供了更加便捷和高效的…

设计模式5-策略模式(Strategy)

设计模式5-策略模式 简介目的定义结构策略模式的结构要点 举例说明1. 策略接口2. 具体策略类3. 上下文类4. 客户端代码 策略模式的反例没有使用策略模式的代码 对比分析 简介 策略模式也是属于组件协作模式一种。现代软件专业分工之后的第一个结果是框架语音应用程序的划分。组…

Linux文件IO操作的学习

文件IO&#xff1a; 文件描述符最小是0&#xff0c;非负数 Open的返回值是3&#xff0c;因为0&#xff0c;1&#xff0c;2被占用了。 read&#xff1a; 使用read和write实现cat操作 实现cp复制操作&#xff1a; 生成与原文件大小一致的空洞文件 文件IO和标准IO互相转换可以使用…