MySQL中的distinct和group by哪个效率更高?

news2024/12/26 0:02:19

前言

大家好,我是月夜枫~~

一、distinct和group by的区别

1.1.作用方式和应用场景

‌group by和‌distinct的主要区别在于它们的作用方式和应用场景。 group by用于对数据进行分组和聚合操作,通常与聚合函数(如COUNT、SUM、AVG等)一起使用,用于生成汇总信息。而distinct则用于从查询结果中选择唯一的值,主要用于数据清理或统计。‌12

group by的作用方式和应用场景:group by语句用于将数据按照一个或多个列进行分组,然后对每个组应用聚合函数(如COUNT、SUM、AVG等)以得到每个组的统计结果。例如,按照商品类别分组并统计每个类别的商品数量。group by通常用于在查询中生成汇总信息,并且可以处理多个字段的分组,这使得它在处理复杂查询时非常有用。‌12

distinct的作用方式和应用场景:distinct语句用于从查询结果中选择唯一的值。它可以用于从一个或多个列中选择唯一的值,也可以用于选择整行的唯一值。例如,按照商品类别查询所有不同的类别。distinct主要用于数据清理或统计,确保查询结果中的值是不重复的。

总结两者的优缺点:在使用时,应根据具体需求选择合适的去重方式。group by通常会产生比distinct更多的结果,因为它按照指定的列进行分组,而每个分组内可能包含多个不同的值。相比之下,distinct主要用于选择不重复的值,但在处理大量数据时,group by的性能通常优于distinct,因为它类似于先建立索引再查索引的过程。‌

distinct 关键字用于从 mysql 查询结果中去除重复行,仅保留唯一值。其用法包括:distinct column_name:从指定列中去除重复值。distinct(column_name1, column_name2, ...):从多个列的组合中去除重复值。

group by的意思为“分组查询”,可以理解为“根据(by)一定的规则进行分组(group)”;作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若干个小区域进行数据处理。在mysql中,group by是select语句的可选子句,用于根据一个或多个字段对查询结果进行分组,它减少了结果集中的行数。

  • 在语义相同,有索引的情况下:group by和distinct都能使用索引,效率相同。

  • 在语义相同,无索引的情况下:distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by可能会进行排序,触发filesort,导致sql执行效率低下。

带着这两个问题找答案。接下来,我们先来看一下distinct和group by的基础使用。

二、distinct的使用

2.1.distinct用法
SELECT DISTINCT columns FROM table_name WHERE where_conditions;

例如:

mysql> select distinct age from student;
+------+
| age  |
+------+
|   10 |
|   12 |
|   11 |
| NULL |
+------+
4 rows in set (0.01 sec)

DISTINCT 关键词用于返回唯一不同的值。放在查询语句中的第一个字段前使用,且作用于主句所有列。

如果列具有NULL值,并且对该列使用DISTINCT子句,MySQL将保留一个NULL值,并删除其它的NULL值,因为DISTINCT子句将所有NULL值视为相同的值。

2.2.distinct多列去重

distinct多列的去重,则是根据指定的去重的列信息来进行,即只有所有指定的列信息都相同,才会被认为是重复的信息。

SELECT DISTINCT column1,column2 FROM table_name WHERE where_conditions;
mysql> select distinct sex,age from student;
+--------+------+
| sex    | age  |
+--------+------+
| male   |   10 |
| female |   12 |
| male   |   11 |
| male   | NULL |
| female |   11 |
+--------+------+
5 rows in set (0.02 sec)

三、group by的使用

对于基础去重来说,group by的使用和distinct类似:

3.1.单列去重

语法:

SELECT columns FROM table_name WHERE where_conditions GROUP BY columns;

执行:

mysql> select age from student group by age;
+------+
| age  |
+------+
|   10 |
|   12 |
|   11 |
| NULL |
+------+
4 rows in set (0.02 sec)
3.2.多列去重

语法:

SELECT columns FROM table_name WHERE where_conditions GROUP BY columns;

执行:

mysql> select sex,age from student group by sex,age;
+--------+------+
| sex    | age  |
+--------+------+
| male   |   10 |
| female |   12 |
| male   |   11 |
| male   | NULL |
| female |   11 |
+--------+------+
5 rows in set (0.03 sec)
3.3.区别示例

两者的语法区别在于,group by可以进行单列去重,group by的原理是先对结果进行分组排序,然后返回每组中的第一条数据。且是根据group by的后接字段进行去重的。

例如:

mysql> select sex,age from student group by sex;
+--------+-----+
| sex    | age |
+--------+-----+
| male   |  10 |
| female |  12 |
+--------+-----+
2 rows in set (0.03 sec)

四、distinct和group by原理

在大多数例子中,DISTINCT可以被看作是特殊的GROUP BY,它们的实现都基于分组操作,且都可以通过松散索引扫描、紧凑索引扫描(关于索引扫描的内容会在其他文章中详细介绍,就不在此细致介绍了)来实现。

DISTINCTGROUP BY都是可以使用索引进行扫描搜索的。例如以下两条sql(只单单看表格最后extra的内容),我们对这两条sql进行分析,可以看到,在extra中,这两条sql都使用了紧凑索引扫描Using index for group-by

所以,在一般情况下,对于相同语义的DISTINCTGROUP BY语句,我们可以对其使用相同的索引优化手段来进行优化。

mysql> explain select int1_index from test_distinct_groupby group by int1_index;
+----+-------------+-----------------------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+
| id | select_type | table                 | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra                    |
+----+-------------+-----------------------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+
|  1 | SIMPLE      | test_distinct_groupby | NULL       | range | index_1       | index_1 | 5       | NULL |  955 |   100.00 | Using index for group-by |
+----+-------------+-----------------------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+
1 row in set (0.05 sec)

mysql> explain select distinct int1_index from test_distinct_groupby;
+----+-------------+-----------------------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+
| id | select_type | table                 | partitions | type  | possible_keys | key     | key_len | ref  | rows | filtered | Extra                    |
+----+-------------+-----------------------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+
|  1 | SIMPLE      | test_distinct_groupby | NULL       | range | index_1       | index_1 | 5       | NULL |  955 |   100.00 | Using index for group-by |
+----+-------------+-----------------------+------------+-------+---------------+---------+---------+------+------+----------+--------------------------+
1 row in set (0.05 sec)

但对于GROUP BY来说,在MYSQL8.0之前,GROUP Y默认会依据字段进行隐式排序。

可以看到,下面这条sql语句在使用了临时表的同时,还进行了filesort。

mysql> explain select int6_bigger_random from test_distinct_groupby GROUP BY int6_bigger_random;
+----+-------------+-----------------------+------------+------+---------------+------+---------+------+-------+----------+---------------------------------+
| id | select_type | table                 | partitions | type | possible_keys | key  | key_len | ref  | rows  | filtered | Extra                           |
+----+-------------+-----------------------+------------+------+---------------+------+---------+------+-------+----------+---------------------------------+
|  1 | SIMPLE      | test_distinct_groupby | NULL       | ALL  | NULL          | NULL | NULL    | NULL | 97402 |   100.00 | Using temporary; Using filesort |
+----+-------------+-----------------------+------------+------+---------------+------+---------+------+-------+----------+---------------------------------+
1 row in set (0.04 sec)
4.1.隐式排序

对于隐式排序,我们可以参考Mysql官方的解释:MySql官网

GROUP BY implicitly sorts by default (that is, in the absence of ASC or DESC designators for GROUP BY columns). However, relying on implicit GROUP BY sorting (that is, sorting in the absence of ASC or DESC designators) or explicit sorting for GROUP BY (that is, by using explicit ASC or DESC designators for GROUP BY columns) is deprecated. To produce a given sort order, provide an ORDER BY clause.

大致解释一下:

GROUP BY 默认隐式排序(指在 GROUP BY 列没有 ASC 或 DESC 指示符的情况下也会进行排序)。然而,GROUP BY进行显式或隐式排序已经过时(deprecated)了,要生成给定的排序顺序,请提供 ORDER BY 子句。

所以,在Mysql8.0之前,Group by会默认根据作用字段(Group by的后接字段)对结果进行排序。在能利用索引的情况下,Group by不需要额外进行排序操作;但当无法利用索引排序时,Mysql优化器就不得不选择通过使用临时表然后再排序的方式来实现GROUP BY了。

且当结果集的大小超出系统设置临时表大小时,Mysql会将临时表数据copy到磁盘上面再进行操作,语句的执行效率会变得极低。这也是Mysql选择将此操作(隐式排序)弃用的原因。

基于上述原因,Mysql在8.0时,对此进行了优化更新:Mysql8.0

Previously (MySQL 5.7 and lower), GROUP BY sorted implicitly under certain conditions. In MySQL 8.0, that no longer occurs, so specifying ORDER BY NULL at the end to suppress implicit sorting (as was done previously) is no longer necessary. However, query results may differ from previous MySQL versions. To produce a given sort order, provide an ORDER BY clause.

大致解释一下:

从前(Mysql5.7版本之前),Group by会根据确定的条件进行隐式排序。在mysql 8.0中,已经移除了这个功能,所以不再需要通过添加order by null 来禁止隐式排序了,但是,查询结果可能与以前的 MySQL 版本不同。要生成给定顺序的结果,请按通过ORDER BY指定需要进行排序的字段。

因此,我们的结论也出来了:

  • 在语义相同,有索引的情况下:

group by和distinct都能使用索引,效率相同。因为group by和distinct近乎等价,distinct可以被看做是特殊的group by

  • 在语义相同,无索引的情况下:

distinct效率高于group by。原因是distinct 和 group by都会进行分组操作,但group by在Mysql8.0之前会进行隐式排序,导致触发filesort,sql执行效率低下。

但从Mysql8.0开始,Mysql就删除了隐式排序,所以,此时在语义相同,无索引的情况下,group by和distinct的执行效率也是近乎等价的。

五、性能对比

在MySQL中,DISTINCT和GROUP BY的性能会受到多个因素的影响,包括表的大小、数据类型、查询条件等。因此,在具体应用中,需要根据实际情况进行选择。下面将对它们的性能进行比较。

5.1.数据类型

综上所述,对于小规模的数据集和简单的查询条件,使用DISTINCT和GROUP BY的性能差别不大,可以根据实际需要进行选择。但是,对于大规模的数据集和复杂的查询条件,建议使用DISTINCT。

在MySQL中,数据量的大小也会影响查询性能。如果数据量较小,那么DISTINCT和GROUP BY的性能差别不大。但是,如果数据量较大,那么GROUP BY的性能会明显受到影响,而DISTINCT的性能则相对较稳定。

这是因为GROUP BY需要对所有数据进行排序和聚合操作,而DISTINCT只需要对不重复的数据进行处理,因此在数据量较大的情况下,DISTINCT的性能相对更优。

5.2.索引

在MySQL中,索引可以大大提高查询性能。如果使用的是索引列,那么DISTINCT和GROUP BY的性能差别不大。但是,如果没有索引,那么GROUP BY的性能会受到较大影响,而DISTINCT的性能则相对较稳定。

5.3.查询条件

在MySQL中,对不同数据类型的处理方式是不同的。对于较小的数据类型(如整型和字符型),使用DISTINCT和GROUP BY的性能差别不大。但是,对于较大的数据类型(如文本类型和二进制类型),DISTINCT的性能要优于GROUP BY。

这是因为DISTINCT可以在内存中进行去重操作,而GROUP BY需要进行排序和聚合操作,因此需要更多的计算资源和时间。

5.4.数据量

在MySQL中,索引可以大大提高查询性能。如果使用的是索引列,那么DISTINCT和GROUP BY的性能差别不大。但是,如果没有索引,那么GROUP BY的性能会受到较大影响,而DISTINCT的性能则相对较稳定。

这是因为GROUP BY需要对所有数据进行排序和聚合操作,而DISTINCT只需要对不重复的数据进行处理,因此DISTINCT在没有索引的情况下相对更快。

5.5.结论

综上所述,对于小规模的数据集和简单的查询条件,使用DISTINCT和GROUP BY的性能差别不大,可以根据实际需要进行选择。但是,对于大规模的数据集和复杂的查询条件,建议使用DISTINCT。

如果查询条件需要使用HAVING子句进行过滤,或者需要返回每个组的统计信息,那么使用GROUP BY更为适合。但是,在使用GROUP BY时,需要注意对索引的优化,以避免影响查询性能。

六、优化建议

在实际应用中,为了提高查询性能,可以采取以下优化措施:

  • 使用合适的索引,以避免全表扫描和排序操作。
  • 尽量避免使用较大的数据类型,可以考虑使用VARCHAR替代TEXT等大型数据类型。
  • 尽量避免使用复杂的查询条件,可以将复杂的查询条件拆分为多个简单的条件。
  • 尽量减少不必要的字段查询,只查询必要的字段。
  • 尽量避免使用子查询和联合查询,可以考虑使用JOIN等更为高效的查询方式。

因此,根据具体情况选择合适的去重方式非常重要。如果数据较大,可以尝试使用DISTINCT来提高性能;如果查询条件较为复杂,可以使用DISTINCT来减少计算量。在实际应用中,可以根据表的大小、数据类型、索引情况和查询条件等因素进行选择。

6.1.为什么松散索引扫描的效率会很高?

因为在没有WHERE 子句,也就是必须经过全索引扫描的时候, 松散索引扫描需要读取的键值数量与分组的组数量一样多,也就是说比实际存在的键值数目要少很多;而在WHERE 子句包含范围判断式或者等值表达式的时候, 松散索引扫描查找满足范围条件的每个组的第1 个关键字,并且再次读取尽可能最少数量的关键字;

6.2.什么是紧凑索引?

紧凑索引扫描和松散索引扫描的区别主要在于,在扫描索引的时候,它需要读取所有满足条件的索引键,然后再根据读取的全部数据来完成GROUP BY 操作得到相应结果,没有跳过一些索引键;

例如,group by语句中的where条件中,对索引列等值查询和范围查询,执行计划是不同的,分别是走松散索引和紧凑索引;

如下:

# 表结构 联合索引(`c1`, `c2`, `c3`)
CREATE TABLE `t1` (
    `id` INT(11) NOT NULL AUTO_INCREMENT,
    `c1` VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `c2` VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    `c3` VARCHAR(255) NULL DEFAULT '' COLLATE 'utf8_general_ci',
    PRIMARY KEY (`id`) USING BTREE,
    INDEX `c` (`c1`, `c2`, `c3`) USING BTREE
)ENGINE=InnoDB;
 
# (1)SQL执行计划 "Using where; Using index" 使用紧凑索引扫描
explain SELECT DISTINCT `c1` FROM t1 WHERE `c2`>'B'; 
 
# (2)SQL执行计划 "Using where; Using index for group-by" 使用松散索引扫描
explain SELECT DISTINCT `c1` FROM t1 WHERE `c2`='B'; 

解释:因为对于组合索引,对组合键值有序;当做其中某个索引列的等值查询时,执行group by时还是能跳过一些不满足等值条件的行,这种情况走松散索引;但是做范围查询时,就需要找到每一行做范围匹配,因此走紧凑索引;

执行计划示例

下面也给出一些松散索引、紧凑索引和走临时表排序的示例;表结构同上表t1;

# (1)SQL执行计划 "Using where; Using index" 使用紧凑索引扫描,索引列范围查询
explain SELECT DISTINCT `c1` FROM t1 WHERE `c2`>'B'; 
 
# (2)SQL执行计划 "Using where; Using index for group-by" 使用松散索引扫描,索引列等值查询
explain SELECT DISTINCT `c1` FROM t1 WHERE `c2`='B'; 
 
# (3)SQL执行计划 "Using index for group-by" 使用松散索引扫描
explain SELECT MIN(c2) from t1 group by c1;
 
# (4)SQL执行计划 "Using index" 使用min/max之外的其它聚集函数,则不能使用松散索引扫描,使用紧凑索引扫描
explain SELECT SUM(c2) from t1 group by c1;
 
# (5)SQL执行计划 "Using index for group-by" 使用松散索引扫描,满足索引前缀
explain SELECT `c1`,`c2` FROM t1 GROUP BY `c1`,`c2`; 
 
# (6)SQL执行计划 "Using where; Using index for group-by" 使用松散索引扫描,满足索引前缀、索引列等值查询
explain SELECT `c1`,`c2`,`c3` FROM t1  WHERE c3='C' GROUP BY `c1`,`c2`; 
 
# (7)SQL执行计划 "Using where; Using index for group-by" 使用松散索引扫描,虽然不满足索引前缀,但前缀中的列为常量
explain SELECT `c1`,`c2`,`c3` FROM t1  WHERE c1='C' GROUP BY `c1`,`c2`,`c3`; 
 
# (8)SQL执行计划 "Using index; Using temporary; Using filesort",使用临时表,不满足前缀索引,分组无法走索引,需要临时表并对分组内元素排序
explain SELECT `c2`,`c3` FROM t1 GROUP BY `c2`,`c3`; 
 
# (9)SQL执行计划 "Using index; Using temporary; Using filesort",使用临时表,不满足前缀索引,分组无法走索引,需要临时表并对分组内元素排序
explain SELECT `c1`,`c3` FROM t1 GROUP BY `c1`,`c3`; 
 
# (10)SQL执行计划 "Using where; Using index",使用紧凑索引扫描,却别于(9)使用临时表,尽管不满足前缀索引,但前缀中的列为常量
explain SELECT `c1`,`c3` FROM t1 WHERE c2='B' GROUP BY `c1`,`c3`; 

最后说一句(求关注,别白嫖我)
如果这篇文章对您有所帮助,或者有所启发的话,帮忙关注一下,您的支持是我坚持写作最大的动力。
求一键三连:点赞、转发、在看。
我从清晨走过,也拥抱夜晚的星辰,人生没有捷径,你我皆平凡,你好,陌生人,一起共勉。

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

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

相关文章

学习分享:微软Edge浏览器全解析(请按需收藏)

成长路上不孤单😊【14后小学生一枚,C爱好者,持续分享所学,如有需要欢迎收藏转发😊😊😊😊😊😊😊】 微软Edge浏览器是一款由微软开发的现代网页浏览…

Python(PyTorch)硅光电倍增管和量化感知训练亚光子算法验证

🎯要点 🎯亚光子光神经网络矩阵计算 | 🎯光学扇入计算向量点积 | 🎯表征测量确定不同光子数量下计算准确度 | 🎯训练全连接多层感知器基准测试光神经网络算法数字识别 | 🎯物理验证光学设备设置 | &#x…

【闭包】闭包知识点总结

一、什么是闭包? ——官方解释: 一个函数对周围状态的引用捆绑在一起,内层函数中访问到其外层函数的作用域 ——简单解释: 👉 闭包内层函数可以引用的外层函数的变量 ——闭包优势 可以保护内部变量,不让外…

黑马前端——days11_综合案例

文章目录 一、首页1、页面开头2、快捷导航2.1 页面框架2.2 格式文件 3、头部模块3.1 页面框架3.2 格式文件 4、导航栏4.1 页面框架4.2 格式文件 5、页面主模块5.1 页面框架5.2 格式文件 6、推荐模块6.1 页面框架6.2 格式文件 7、楼层模块7.1 页面框架7.2 格式文件 8、页面底部8…

webrtc学习笔记2

音视频采集和播放 打开摄像头并将画面显示到页面 1. 初始化button、video控件 2. 绑定“打开摄像头”响应事件onOpenCamera 3. 如果要打开摄像头则点击 “打开摄像头”按钮,以触发onOpenCamera事件的调用 4. 当触发onOpenCamera调用时 a. 设置约束条件&#xff0c…

虚幻UE5安装报错误代码:SU-PQR5

找到图标的快捷方式 “Epic Games Launcher”右键属性,在目标最后添加-SkipBuildPatchPrereq,如下图: 最后,见证奇迹成功打开软件,可以继续安装啦。 参考资料: 【图片】求教各位大佬--错误代码SU-PQR5【ep…

Linux网络编程—socket、bind

一、socket创建套接字 socket是用来创建网络通信或本地通信的套接字&#xff0c;跟文件有关&#xff1a;告诉系统&#xff0c;PCB&#xff08;进程控制块&#xff09;控制的数据应该向哪个套接字写入、或读取&#xff1b;这个套接字是在TCP/IP协议下运行的 #include <sys/t…

配置MySQL主从,配置MySQL主主 +keeplive高可用

在大数据-Hadoop体系中 配置MySQL主主keeplive高可用 注意&#xff1a;这个是我两年前的word文档&#xff0c;可以当作参考文档有个思路参考一下&#xff0c;但是里面可能有些地方有误 另外 :关于一些企业级实战技术可以参考这篇mysql 物理备份 MySQL 全量备份 增量备份 差异…

NFTScan 正式上线 AI Search 浏览器,实现 NFT 数据双重搜索功能

近日&#xff0c;NFT 数据基础设施服务商 NFTScan 正式对外发布了 AI Search 浏览器&#xff0c;这一创新工具旨在为 NFT 生态中的开发者和用户提供简洁高效的 NFT 数据搜索与查询服务。NFTScan 的这一举措不仅帮助用户更方便地访问相关的 NFT 数据&#xff0c;还大幅提升了数据…

STM32F407ZGT6无操作系统移植lwip2.1.3,,具备DHCP功能

1.工程添加网络库文件 (1).拷贝文件夹 解压en.stsw-stm32070.zip压缩包,把STM32F4x7_ETH_LwIP_V1.1.1\Libraries\STM32F4x7_ETH_Driver文件夹下的inc和src文件夹拷贝到 STM32F407\FWLIB\STM32F4x7_ETH_Driver文件夹目录下&#xff1a; (2).重命名头文件 进入STM32F407\FWLI…

【TM1638不能成功读回按键值】

8led8按键8数码管。主函数调用TM1638_ReadData2&#xff0c;打印了返回值&#xff0c;无论是否按键&#xff0c;都一直打印255&#xff0c;为什么全是1&#xff0c;看来读数据函数有问题啊。 u8 TM1638_ReadData2(void) {uint8_t i;uint8_t temp0x00;TM1638_DIOModeInput();/…

前端读取response.headers异常:Cannot read properties of undefined (reading ‘split‘)

[TOC](前端读取response.headers异常:Cannot read properties of undefined (reading ‘split’) ) 前端读取response.headers异常 Cannot read properties of undefined (reading ‘split’) TypeError: Cannot read properties of undefined (reading ‘split’) 报错解释&a…

如何修改计算机ip地址?几招教你轻松改

在日常使用计算机的过程中&#xff0c;有时我们需要修改计算机的IP地址&#xff0c;无论是出于网络安全、网络管理还是其他特定需求。然而&#xff0c;对于非专业人士来说&#xff0c;这一过程可能显得复杂且充满挑战。但别担心&#xff0c;本文将带您了解IP地址基础知识&#…

day04 --js的常用对象、BOM对象和DOM对象

一、常用对象 1.1 数组 1.创建数组:let arr [1,2,3]; let arr new Array(1,2,3);注意&#xff1a;JS数组不区分数据类型&#xff0c;而且其长度可以随意改变&#xff0c;因此JS数组类似于Java中的集合 ​ 2.数组常用方法:length:这是一个属性&#xff0c;用于获取数组长度fo…

以「垂直模型」引领AIGC商业化落地,FancyTech的技术路径是什么?

我们正在见证又一轮技术革新&#xff0c;这一次是 AIGC 为个体提供表达自我的工具&#xff0c;让创作变得更加容易和普及&#xff0c;但背后的推动力却并不是「大」模型。 点击访问我的技术博客https://ai.weoknow.comhttps://ai.weoknow.com 两年以来&#xff0c;AIGC 技术的发…

快速备份与检索ChatGPT对话记录,以及便捷关闭聊天历史教程

近期&#xff0c;ChatGPT 用户遭遇了一系列对话记录意外丢失的事件&#xff0c;引发了广泛的关注和不便。用户们对于重要聊天记录的安全性表示担忧&#xff0c;害怕珍贵的交流内容会不翼而飞。 令人欣慰的是&#xff0c;OpenAI 在2023年4月11日宣布推出了一项新的功能——Chat…

雨云美国二区E5v2服务器测评(非广告)

注&#xff1a;本文非广告&#xff0c;非推广 本文长期更新地址&#xff1a; 雨云美国二区E5v2服务器测评&#xff08;非广告&#xff09;-星零岁的博客https://blog.0xwl.com/13594.html 今天来测评一下雨云美国二区v2服务器。我测试的这台配置是4-8&#xff0c; 35 M上传&a…

SpringBoot教程(二十三) | SpringBoot实现分布式定时任务之xxl-job

SpringBoot教程&#xff08;二十三&#xff09; | SpringBoot实现分布式定时任务之xxl-job 简介一、前置条件&#xff1a;需要搭建调度中心1、先下载调度中心源码2、修改配置文件3、启动项目4、进行访问5、打包部署&#xff08;上正式&#xff09; 二、SpringBoot集成Xxl-Job1.…

水利机械5G智能制造工厂物联数字孪生平台,推进制造业数字化转型

在当今这个科技日新月异的时代&#xff0c;水利机械行业正经历着一场深刻的变革&#xff0c;其中5G智能制造工厂物联数字孪生平台的引入&#xff0c;无疑是推动制造业数字化转型的重要驱动力。工业物联数字孪生平台是智能制造工厂的核心组成部分&#xff0c;它基于物理世界的真…

入门mysql 数据库

mysql是关系型数据库 &#xff08;安装教程请参考主页相关文章https://blog.csdn.net/2401_86120676/article/details/141265678?spm1001.2014.3001.5502 和mysql Ubuntu安装与远程连接配置-CSDN博客&#xff09; mysql相关指令 1.数据库 展示所有的数据库&#xff1a;sho…