首页 程序笔记 MySQL 5.x和MySQL 8.x数据库的区别

MySQL 5.x和MySQL 8.x数据库的区别

MySQL 是开源关系型数据库的代表,广泛应用于不同规模的 Web 和企业应用中。从 MySQL 5.x 到 MySQL 8.x 的升级带来了大量功能改进和性能提升。为了帮助大家更直观地理解两者的区别,本文将通过详细介绍并结合实际的 SQL 样例来对比 MySQL 5.x 和 MySQL 8.x。

存储引擎的改进

MySQL 5.x 存储引擎

在 MySQL 5.x 版本中,InnoDB 和 MyISAM 是两个主要的存储引擎。其中,InnoDB 支持事务、外键约束、行级锁等功能,MyISAM 则更适合读取密集型应用。尽管 InnoDB 已成为默认引擎,但其性能和功能相对较弱。

MySQL 8.x 存储引擎

MySQL 8.x 对 InnoDB 引擎进行了大幅度优化,主要在性能、事务处理能力、并发控制等方面实现了提升。此外,MySQL 8.x 还支持对表分区的改进,使得数据查询在大数据场景下更高效。

区别对比1

在 MySQL 5.x 中创建一个带有外键约束的表:

CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_date DATE,
    FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);

在 MySQL 8.x 中,尽管创建表的语法与 5.x 相同,但 MySQL 8.x 中的 InnoDB 对外键约束的处理更加高效,同时支持在线添加外键:

ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id);

此外,MySQL 8.x 还允许在执行 DDL 操作时不锁定表,从而提升了并发执行效率。

性能提升

MySQL 5.x 性能特点

在 MySQL 5.x 中,数据库性能主要依赖于查询优化器的效率。然而,复杂查询在大数据量场景下可能会遇到瓶颈,特别是在执行复杂联接、排序、分组等操作时。

MySQL 8.x 性能特点

MySQL 8.x 通过改进查询优化器和执行计划缓存显著提升了数据库的性能,特别是在多核 CPU 环境下,支持更高效的并发执行。对于大规模数据处理,MySQL 8.x 提供了优化的分区表查询策略。

区别对比2

MySQL 5.x 执行复杂查询时表现:

SELECT order_id, COUNT(*) 
FROM orders 
GROUP BY order_id 
HAVING COUNT(*) > 1;

在大数据量下,MySQL 5.x 的查询可能会耗费较长时间。

MySQL 8.x 中同样的查询:

WITH order_count AS (
    SELECT order_id, COUNT(*) AS cnt
    FROM orders
    GROUP BY order_id
)
SELECT order_id 
FROM order_count
WHERE cnt > 1;

MySQL 8.x 支持使用 CTE(公用表表达式)简化查询逻辑,并且通过优化的执行计划大幅度减少了查询时间。

SQL 语法和功能增强

窗口函数

MySQL 5.x 不支持窗口函数。

MySQL 8.x 中引入了窗口函数,使得开发者可以在查询中更灵活地进行分组统计、排名等操作。

CTE(公用表表达式)

MySQL 5.x 不支持 CTE。

MySQL 8.x 支持递归查询和多级查询,简化了复杂 SQL 的编写过程。

JSON 支持

MySQL 5.x 中的 JSON 支持有限,仅在 MySQL 5.7 开始引入,功能不够完善。

MySQL 8.x 增强了对 JSON 的支持,提供了丰富的 JSON 操作函数,可以更加灵活地存储和处理半结构化数据。

区别对比3

MySQL 5.x 处理 JSON 数据的查询:

SELECT JSON_EXTRACT(data, '$.name') AS name 
FROM customers;

MySQL 8.x 中的增强版本:

SELECT JSON_UNQUOTE(JSON_EXTRACT(data, '$.name')) AS name 
FROM customers;

此外,MySQL 8.x 支持 JSON 值的排序、修改等更复杂的操作:

UPDATE customers
SET data = JSON_SET(data, '$.age', 30)
WHERE JSON_EXTRACT(data, '$.name') = 'John Doe';

安全性和权限管理

MySQL 8.x 在权限管理和密码加密方面引入了新的机制,比如更强的密码算法和双因素认证,提升了整体的安全性。

区别对比4

MySQL 5.x 创建用户和设置权限:

CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
GRANT SELECT, INSERT ON database.* TO 'user'@'localhost';

MySQL 8.x 中的操作:

CREATE USER 'user'@'localhost' IDENTIFIED WITH 'caching_sha2_password' BY 'StrongerPass#123';
GRANT SELECT, INSERT ON database.* TO 'user'@'localhost' WITH MAX_QUERIES_PER_HOUR 1000;

MySQL 8.x 支持更强的密码加密算法,并允许对用户权限进行更细粒度的控制。

并发和锁机制

MySQL 8.x 对锁机制进行了优化,允许更多并发事务的同时执行,而不增加锁争用的风险。

区别对比5

MySQL 5.x 中的行级锁示例:

BEGIN;
SELECT * FROM orders WHERE order_id = 123 FOR UPDATE;

MySQL 8.x 通过优化锁机制,使得在高并发环境下性能更好:

BEGIN;
SELECT * FROM orders WHERE order_id = 123 LOCK IN SHARE MODE;

在 8.x 中,MySQL 自适应锁定策略根据并发量自动调整,减少了锁等待的时间。

InnoDB 引擎的增强

MySQL 8.x 对 InnoDB 事务处理进行了优化,提升了事务的原子性和并发处理能力,特别是在执行复杂的事务时,8.x 的表现更加稳定。

复制与高可用性

MySQL 8.x 引入了并行复制和组复制,支持高可用的读写分离架构,有效提升了系统的可扩展性和故障恢复能力。

其他显著变化

性能模式(Performance Schema)

MySQL 8.x 中的 Performance Schema 更加完善,允许 DBA 精细地监控数据库的运行情况,方便优化查询和系统性能。

总结

MySQL 8.x 相比 MySQL 5.x 带来了显著的性能提升和功能增强。无论是在 SQL 语法的灵活性、安全性、还是存储引擎的表现上,8.x 都在企业级应用和高并发场景下表现得更加优越。如果有条件,建议尽早升级到 MySQL 8.x 以充分利用其新特性。

1

站心网

MySQL 是开源关系型数据库的代表,广泛应用于不同规模的 Web 和企业应用中。从 MySQL 5.x 到 MySQL 8.x 的..

为您推荐

Web前端入门第 55 问:JavaScript 严格模式与非严格模式区别

JavaScript 默认是非严格模式的,可以通过 "use strict"; 启用严格模式。此声明语句可以放在 JS 文件顶部,也可以放在函数内部。启用严格模式1、外部脚本在 JS 文件开头声明,内部脚本在 <script> 标签开头声明,声..

Mysql跨库操作

在 MySQL 中,操作多数据源(例如从库 A 和库 B)进行联查的情况,可以分为以下两种场景:A 库和 B 库在同一个 MySQL 实例当 A 库和 B 库在同一个 MySQL 实例下时,可以直接使用跨库联查查询。示例如下:SELECT A.co..

大数据领域面临的挑战与未来的演进趋势

序有群友提了一个关于大数据行业当前发展状况的问题。暂时先用GPT帮我们对此问题,搜罗和总结一二。其一,此问题较为宏大,需要结合个人实践、对行业的综合认知做深度思考,较为耗时。短时间内,懒于再一一总结和思..

openHalo:国产数据库Halo正式开源,迈向高性能兼容新时代

近日,国产数据库Halo迎来重要里程碑,正式宣布开源,项目命名为 openHalo,并已在GitHub上线(openHaloHitHub地址:https://github.com/HaloTech-Co-Ltd/openHalo)。openHalo旨在提供一个兼容MySQL协议、基于Postg..

MySQL下200GB大表备份,利用传输表空间解决停服发版表备份问题

问题背景在停服发版更新时,需对 200GB 大表(约 200 亿行数据)进行快速备份以预防操作失误。因为曾经出现过有开发写的发版语句里,UPDATE语句的WHERE条件写错了,原本只需要更新几行数据,最终导致更新了半张表的..

如果单表数据量大,只能考虑分库分表吗?

程序员最怕啥?不是需求改八遍,也不是半夜报警电话,而是数据库突然卡成PPT!尤其是当单表数据冲到几千万行,查询慢得像老牛拉车,这时候团队第一反应往往是:“赶紧分库分表!”但兄弟,分库分表可不是什么温柔小..

PGlite:轻量级嵌入式PostgreSQL数据库使用方法

PGlite是一款基于PostgreSQL的轻量级嵌入式数据库,专为前端应用、无服务器环境和本地开发优化。与传统的PostgreSQL服务器相比,PGlite无需单独安装数据库服务,而是可以直接在应用程序内部运行,提供了一种更加灵活..

服务器安装数据库MySQL8.0版本,打包导入到MySQL5.6失败的结局方式

最近数据库升级为mysql8.0,在使用过程中发现一些问题,首先mysql8.0有很多新特性,对服务器配置要求较高,所有就考虑把数据库版本切换到MySQL5.6,经过多出测试处理发现在8.0数据库打包的数据导入到5.6总是报错,或..

在数据库中cms_content表content字段用SQL过滤替换掉包含photo.abc.tw所有图片img标签

SQL 语句:UPDATEcms_contentSETcontent=REGEXP_REPLACE(content,'<img[^>]*src="photo\\.abc\\.tw[^"]*"[^>]*>','')WHEREcontentREGEXP'<img[^>]*src="//photo\\.abc\\.tw';解释:REGEXP_R..

MySQL查询建表规范

因为之前一直再查找一些比较好的数据库规范,以方便在开发时连接 MySQL 进行查询/建表的时候,能根据规范来执行,达到提高 查询速度 / 执行 SQL 的性能 和提升 MySQL 的整体性能, 这里主要是存放一些比较好的一些数..

实时数据的处理一致性如何保证?

实时数据一致性的定义以及面临的挑战数据一致性通常指的是数据在整个系统或多个系统中保持准确、可靠和同步的状态。在实时数据处理中,一致性包括但不限于数据的准确性、完整性、时效性和顺序性。下图是典型的实时/..

关于大数据的一些真知灼见

大数据很强大,但还是有很多人仍然不知道它到底是什么。让我们来学习大数据的真实表现,以及如何更好地促进企业转型。或许我们经常听到有人讲大数据,但仍然有很多人不知道它到底是什么。因为我确信它很强大,所以我..

必须掌握的MySQL优化指南(2)

4|0表分区MySQL 在 5.1 版引入的分区是一种简单的水平拆分,用户需要在建表的时候加上分区参数,对应用是透明的无需修改代码。对用户来说,分区表是一个独立的逻辑表,但是底层由多个物理子表组成,实现分区的代码实..

数据库SQL优化大总结之 百万级数据库优化方案

1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from..

mysql分表简单介绍

一、Mysql分表的原因1、当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会停在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。2、mysql中有一种机制是表锁定..

在 Javascript 中 声明时用 var 与不用 var 的区别

avascript 声明变量的时候,虽然用 var 关键字声明和不用关键字声明,很多时候运行并没有问题,但是这两种方式还是有区别的。可以正常运行的代码并不代表是合适的代码。var num = 1;是在当前域中声明变量。如果在方..

MySQL创建用户与授权

一, 创建用户: 命令:CREATE USER'username'@'host' IDENTIFIED BY 'password'; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, ..

.net环境下跨进程、高频率读写数据

一、需求背景1、最近项目要求高频次地读写数据,数据量也不是很大,多表总共加起来在百万条上下。单表最大的也在25万左右,历史数据表因为不涉及所以不用考虑,难点在于这个规模的热点数据,变化非常频繁。数据来源..

必须掌握的MySQL优化指南(1)

1.单表优化除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度。一般以整型值为主的表在千万级以下,字符串为主的表在五百万以下是没有太大问题的。而事实上很多时..

float 与 double 类型区别

float 单精度浮点数在机内占 4 个字节,用 32 位二进制描述。double 双精度浮点数在机内占 8 个字节,用 64 位二进制描述。浮点数在机内用指数型式表示,分解为:数符,尾数,指数符,指数四部分。数符占 1 位二进制..

发表回复

返回顶部

微信分享

微信分享二维码

扫描二维码分享到微信或朋友圈

链接已复制