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瘫…

LabVIEW火箭发动机试车台程序

火箭发动机试车台是火箭发动机研制过程中的关键环节之一,通过模拟实际工作环境对发动机进行测试,确保其性能和可靠性。随着科研需求的不断变化和技术的进步,对试车台的灵活性、可靠性和易维护性提出了更高的要求。基于LabVIEW开发的试车台程序…

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

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

什么是深拷贝,什么是浅拷贝

在计算机科学中,特别是涉及到编程语言如JavaScript、Java、C等时,我们经常遇到“深拷贝”和“浅拷贝”这两个概念。它们都与对象的复制有关,但处理方式不同。 浅拷贝 (Shallow Copy): 浅拷贝只复制对象的顶层属性(或称为“引用”…

go switch 与 interface

go switch 与 interface 前言 前言 github.com/google/cel-go/common/types/ref type Val interface {// ConvertToNative converts the Value to a native Go struct according to the// reflected type description, or error if the conversion is not feasible.ConvertTo…

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的某些…

中介子方程三十二

XXFXXuXXWXXuXXdXXrXXαXXuXpXXKXXpXuXXαXXrXXdXXuXWXπXXWXeXyXeXbXπXpXXNXXqXeXXrXXαXXuXpXXKXXpXuXXαXXrXXeXqXXNXXpXπXbXeXyXeXWXXπXWXuXXdXXrXXαXXuXpXXKXXpXuXXαXXrXXdXXuXXWXXuXXFXXEXXyXXEXXrXXαXXuXpXXKXXpXuXXαXXrXXEXXyXXαXiXXαXiXrXkXtXyXXpXVXXdXuXWX…

梅花易数排盘 api数据接口

梅花易数为北宋易学家邵雍所传,因观梅知易数而得名。以卦象生克为主,而不分析爻象。是为梅花易数预测。 接口名称:流盘-梅花易数 接口平台:缘份居国学研究(缘份居国学研究开发者API) 接口地址:https://api.yuanfenj…

来自工业界的知识库 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;处理器 软件则包括系统软件和…