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

news2024/10/23 2:50:11

目录

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.coloradmin.cn/o/1844209.html

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

相关文章

变长的时间戳设计

以前的时间戳有32位,以秒为单位,231秒≈68年,从1970年开始,到2038年会出问题。 后来出现的时间戳有64位,以纳秒为单位,263纳秒≈292年。 本次设计的变长时间戳,以32比特为单位,总共…

“尚泉杯”2024 演讲朗诵公益展演展播在京启动

2024 年 6 月 15 日“尚泉杯”2024 演讲朗诵公益展演展播启动仪式在北京隆重举行。本次活动宗旨是响应领导讲话精神,通过演讲朗诵等形式弘扬中国文化,展现中国魅力,促进文化交流。 活动以“爱我中华”为主体线索,鼓励参与者采用不…

显卡nvidia的CUDA和cuDNN的安装

显卡版本,和nvidia下载的 CUDA版本和CUDNN的关系 1. 显卡版本 nvidia-smi 硬件环境:显卡版本 4090 NVIDIA-SMI-555.85 我的驱动是510.85.02,驱动附带cuda12.5 2. nvidia下载的cuda版本 nvcc -V 我下载的是cuda12.5 cuda在安装版本过程…

新手下白对Latex下手啦!

第一次使用latex,浅浅地记录一下子吧。 首先我们一般会下载一个latex模板,如果想知道咋下载,评论去告诉俺哟! 新手小白首先要看懂结构,不然完全下不了手,本文就以IEEE的模板,从头往下讲咯~ 第…

【全网最全最详细】RabbitMQ面试题

一、说下RabbitMQ的架构大致是什么样的? RabbitMQ是一个开源的消息中间件,用于在应用程序之间传递消息。它实现了AMQP(高级消息队列协议)并支持其它消息传递协议,例如STOMP(简单文本定向消息协议&#xff…

动态轮换代理IP是什么?有什么用?

如果您要处理多个在线帐户,选择正确的代理类型对于实现流畅的性能至关重要。但最适合这项工作的代理类型是什么? 为了更好地管理不同平台上的多个账户并优化成本,动态住宅代理IP通常作用在此。 一、什么是轮换代理? 轮换代理充当…

AWR1843BOOST上的TM4C1294NCPDT是干啥用的?

摘要:AWR1843BOOST上面有2个体积较大的芯片,一片是雷达,另一片是什么呢? 答案:它就是XDS110仿真器。 有了它,就不用再买一个仿真器了。 从AWR1843BOOST的原理图中可以看到整个 BOOST板子上只有2个比较大的…

Java实现俄罗斯方块——文本域组件

技术实现: 1.初始化游戏窗口; 2.初始化游戏界面; 3.初始化游戏的说明面板; 4.随机生成下落方块; 5.绘制方块; 6.清除方块; 7.清楚某一行方块,上方方块掉落; 8.刷新…

elementUI的el-table自定义表头

<el-table-column label"昨日仪表里程(KM)" align"left" min-width"190" :render-header"(h, obj) > renderHeader(h, obj, 参数)" > <template slot-scope"scope"> <span>{{ scope.row.firstStartMil…

深度解析响应式异步编程模型

上一篇文章中我们聊了一下线程池,基于线程池的多线程编程是我们在高并发场景下提升系统处理效率的有效手段,但却不是唯一的。今天我们来看一下另一种异步开发的常用手段-响应式编程模型 传统多线程模型的缺陷 多线程模型是目前应用最为广泛的并发编程手段,但凡遇到什么性能…

小摩法兴纷纷转多,看涨港股的时机来了吗?

恒生指数今日高开一度上涨89点报18520点&#xff0c;创近两周高。之后持续震荡下行&#xff1b;恒指临近中 午跌幅扩大&#xff0c;恒生科技指数一度跌近1.5%。截止收盘&#xff0c;恒生指数跌0.52%&#xff0c;盘面上&#xff0c;石油、煤炭、环保、建筑节能等板块涨幅居前&a…

【简易版tinySTL】 vector容器

文章目录 基本概念功能思路代码实现vector.htest.cpp 代码详解变量构造函数析构函数拷贝构造operatorpush_backoperator[]insertprintElements 本实现版本 和 C STL标准库实现版本的区别&#xff1a; 基本概念 vector数据结构和数组非常相似&#xff0c;也称为单端数组vector与…

IP SSL证书使用率大幅度提升

IP SSL证书的使用人数在增长&#xff0c;这一趋势背后有几个推动因素&#xff1a; 1.网络安全意识提升&#xff1a;随着网络安全事件频发&#xff0c;用户和企业对数据保护的重视程度日益增加。IP SSL证书能为基于IP地址直接访问的网站或服务提供加密&#xff0c;有助于防止数据…

深入了解常用负载均衡软件

在构建高性能、高可用的分布式系统时&#xff0c;负载均衡技术扮演着至关重要的角色。它通过合理分发网络请求到后端服务器集群&#xff0c;从而有效提升系统吞吐量、减少响应延迟、并保障系统的稳定运行。本文将介绍几种常用的负载均衡软件&#xff0c;包括它们的优缺点、应用…

高效空气净化器大揭秘,不要再花冤枉钱了!对付“灰尘、毛絮”真好用

最近因为天气炎热的原因&#xff0c;基本上家家户户每天都在开窗通风透气&#xff0c;这就导致很多家庭一直饱受灰尘、毛絮等问题的困扰。 即使天天打扫&#xff0c;家里各处依旧能够找到灰尘、毛絮的踪迹&#xff0c;让很多人苦不堪言。甚至有一部分的灰尘毛絮又聚集在了一些…

C语言中字符串处理函数

目录 前言 1. strlen 测字符串长度函数 2.字符串拷贝函数 2.1strcpy 2.2 strncpy 3.strcat字符串追加函数 4. strcmp/strncmp 比较函数 5.字符查找函数 5.1 strchr 5.2 strrchr 6.atoi/atol/atof字符串转换数值 总结 前言 从0开始记录我的学习历程&#xff0c;我会尽…

Freemaker 模板

背景 发送邮件&#xff0c;正文利用freemaker完成 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId> </dependency>Autowired private Configuration configurer;GetMap…

04 - matlab m_map地学绘图工具基础函数 - 设置网格

04 - matlab m_map地学绘图工具基础函数 - 设置网格 0. 引言1. 关于m_grid2. 关于m_utmgrid3. 结语 0. 引言 本篇介绍下m_map中网格设置有关的函数m_grid和m_utmgrid&#xff0c;其中m_grid较为常用&#xff0c;m_utmgrid为设置UTM网格&#xff0c;仅支持在UTM投影下使用。 首先…

【数据库系统概论复习】关系数据库与关系代数笔记

文章目录 基本概念数据库基本概念关系数据结构完整性约束 关系代数关系代数练习课堂练习 语法树 基本概念 数据库基本概念 DB 数据库&#xff0c; 为了存用户的各种数据&#xff0c;我们要建很多关系&#xff08;二维表&#xff09;&#xff0c;所以把相关的关系&#xff08;二…

算法训练营day15--110.平衡二叉树+ 257. 二叉树的所有路径+ 404.左叶子之和+222.完全二叉树的节点个数

一、110.平衡二叉树 题目链接&#xff1a;https://leetcode.cn/problems/balanced-binary-tree/ 文章讲解&#xff1a;https://programmercarl.com/0110.%E5%B9%B3%E8%A1%A1%E4%BA%8C%E5%8F%89%E6%A0%91.html 视频讲解&#xff1a;https://www.bilibili.com/video/BV1Ug411S7m…