【MySQL高级篇笔记-索引优化与查询优化(中) 】

news2024/11/25 22:45:06

此笔记为尚硅谷MySQL高级篇部分内容

目录

一、索引失效案例

二、关联查询优化

1、采用左外连接

2、采用内连接

3、join语句原理

1.驱动表和被驱动表

2.Simple Nested-Loop Join(简单嵌套循环连接)

3.Index Nested-Loop Join(索引嵌套循环连接)

4.Block Nested-Loop Join(块嵌套循环连接)

5.Join小结

6.Hash Join

4、小结

三、子查询优化

四、排序优化

filesort算法:双路排序和单路排序

五、GROUP BY优化

六、优化分页查询

七、优先考虑覆盖索引

1、什么是覆盖索引?

2、覆盖索引的利弊 

八、如何给字符串添加索引

1、前缀索引

2、前缀索引对覆盖索引的影响 

九、索引下推 ICP

1、索引条件下推使用前后

2、ICP的开启/关闭

3、 ICP的使用条件 

十、普通索引 vs 唯一索引

1、查询过程

2、更新过程

3、change buffer的使用场景

十一、 其它查询优化策略

1、EXISTS 和 IN 的区分

2、COUNT(*)与COUNT(具体字段)效率

3、关于SELECT(*)

4、LIMIT 1 对优化的影响

5、多使用COMMIT

十二、淘宝数据库,主键如何设计的?

1、自增ID的问题

2、业务字段做主键

3、淘宝的主键设计

4、推荐的主键设计


都有哪些维度可以进行数据库调优?简言之:

  • 索引失效、没有充分利用到索引——索引建立

  • 关联查询太多JOIN (设计缺陷或不得已的需求)——SQL优化

  • 服务器调优及各个参数设置(缓冲、线程数等)———调整my.cnf。

  • 数据过多――分库分表

关于数据库调优的知识点非常分散。不同的DBMS,不同的公司,不同的职位,不同的项目遇到的问题都不尽相同。这里我们分为三个章节进行细致讲解。

虽然SQL查询优化的技术有很多,但是大方向上完全可以分成物理查询优化逻辑查询优化两大块。

  • 物理查询优化是通过索引表连接方式等技术来进行优化,这里重点需要掌握索引的使用。

  • 逻辑查询优化就是通过SQL等价变换提升查询效率,直白一点就是说,换一种查询写法执行效率可能更高。

一、索引失效案例


MySQL中提高性能的一个最有效的方式是对数据表设计合理的索引。索引提供了高效访问数据的方法,并且加快查询的速度,因此索引对查询的速度有着至关重要的影响。

  • 使用索引可以快速地定位表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。

  • 如果查询时没有使用索引,查询语句就会扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢。

大多数情况下都(默认)采用B+树来构建索引。只是空间列类型的索引使用R-树,并且MEMORY表还支持hash索引

其实,用不用索引,最终都是优化器说了算。优化器是基于什么的优化器?基于cost开销(CostBaseOptimizer),它不是基于规则(Rule-BasedOptimizer),也不是基于语义。怎么样开销小就怎么来。另外,SQL语句是否使用索引,跟数据库版本、数据量、数据选择度都有关系。  

1、全值匹配我最爱

意思是创建联合索引多个索引同时生效。

2、最佳左前缀法则

在MySQL建立联合索引时会遵守最佳左前缀匹配原则,即最左优先,在检索数据时从联合索引的最左边开始匹配。

如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始并且不跳过索引中的列。

结论:MySQL可以为多个字段创建索引,一个索引可以包括16个字段。对于多列索引,过滤条件要使用索引必须按照索引建立时的顺序,依次满足,一旦跳过某个字段,索引后面的字段都无法被使用。如果查询条件中没有使用这些字段中第1个字段时,多列(或联合)索引不会被使用。

拓展:Alibaba《Java开发手册》
索引文件具有 B-Tree 的最左前缀匹配特性,如果左边的值未确定,那么无法使用此索引。

3、主键插入顺序

4、计算、函数、类型转换(自动或手动)导致索引失效

5、类型转换导致索引失效

6、范围条件右边的列索引失效

7、不等于(!= 或者<>)索引失效

8、is null可以使用索引,is not null无法使用索引

结论: 最好在设计数据表的时候就将字段设置为 NOT NULL 约束,比如你可以将INT类型的字段,默认值设置为0。将字符类型的默认值设置为空字符串。

拓展: 同理,在查询中使用not like 也无法使用索引,导致全表扫描

9、like以通配符%开头索引失效

在使用LIKE关键字进行查询的查询语句中,如果匹配字符串的第一个字符为“%”,索引就不会起作用。只有“%"不在第一个位置,索引才会起作用。

拓展:Alibaba《Java开发手册》 【强制】页面搜索严禁左模糊或者全模糊,如果需要请走搜索引擎来解决。

10、OR 前后存在非索引的列,索引失效

在WHERE子句中,如果在OR前的条件列进行了索引,而在OR后的条件列没有进行索引,那么索引会失效。也就是说,OR前后的两个条件中的列都是索引时,查询中才使用索引

因为OR的含义就是两个只要满足一个即可,因此只有一个条伴列进行了索引是没有意义的,只要有条件列没有进行索引,就会进行全表扫描,因此索引的条件列也会失效。

11、数据库和表的字符集统一使用utf8mb4

统一使用utf8mb4( 5.5.3版本以上支持)兼容性更好,统一字符集可以避免由于字符集转换产生的乱码。不 同的 字符集 进行比较前需要进行 转换 会造成索引失效。

12、练习及一般性建议

练习:假设:index(a,b,c)

一般性建议:

  • 对于单列索引,l尽量选择针对当前query过滤性更好的索引

  • 在选择组合索引的时候,当前query中过滤性最好的字段在索引字段顺序中,位置越靠前越好。。在选择组合

  • 索引的时候,尽量选择能够包含当前query中的where子句中更多字段的索引。

  • 在选择组合索引的时候,如果某个字段可能出现范围查询时,尽量把这个字段放在索引次序的最后面。

总之,书写SQL语句时,尽量避免造成索引失效的情况。

二、关联查询优化


1、采用左外连接

2、采用内连接

  • 内连接 主被驱动表是由优化器决定的。优化器认为哪个成本比较小,就采用哪种作为驱动表。

  • 如果两张表只有一个有索引,那有索引的表作为被驱动表

    • 原因:驱动表要全查出来。有没有索引你都得全查出来。

  • 两个索引都存在的情况下, 数据量大的 作为被驱动表(小表驱动大表)

    • 原因:驱动表要全部查出来,而大表可以通过索引加快查找

3、join语句原理

1.驱动表和被驱动表

2.Simple Nested-Loop Join(简单嵌套循环连接)

3.Index Nested-Loop Join(索引嵌套循环连接)

4.Block Nested-Loop Join(块嵌套循环连接)

5.Join小结

1、整体效率比较:INLJ > BNLJ > SNLJ

2、永远用小结果集驱动大结果集(其本质就是减少外层循环的数据数量)(小的度量单位指的是表行

3、为被驱动表匹配的条件增加索引(减少内层表的循环匹配次数)

4、增大join buffer size的大小(一次缓存的数据越多,那么内层包的扫表次数就越少)

5、减少驱动表不必要的字段查询(字段越少,join buffer 所缓存的数据就越多)

6、在决定哪个表做驱动表的时候,应该是两个表按照各自的条件过滤,过滤完成之后,计算参与join的各个字段的总数据量,数据量小的那个表,就是“小表”,应该作为驱动表。

6.Hash Join

从MySQL的8.0.20版本开始将废弃BNLJ,因为从MySQL8.0.18版本开始就加入了hash join默认都会使用hash join

4、小结

  • 保证被驱动表的JOIN字段已经创建了索引

  • 需要JOIN 的字段,数据类型保持绝对一致。

  • LEFT JOIN 时,选择小表作为驱动表, 大表作为被驱动表 。减少外层循环的次数。

  • INNER JOIN 时,MySQL会自动将 小结果集的表选为驱动表 。选择相信MySQL优化策略。

  • 能够直接多表关联的尽量直接关联,不用子查询。(减少查询的趟数)

  • 不建议使用子查询,建议将子查询SQL拆开结合程序多次查询,或使用 JOIN 来代替子查询。

  • 衍生表建不了索引

三、子查询优化


MySQL从4.1版本开始支持子查询,使用子查询可以进行SELECT语句的嵌套查询,即一个SELECT查询的结果作为另一个SELECT语句的条件。子查询可以一次性完成很多逻辑上需要多个步骤才能完成的SQL操作

子查询是MySQL的一项重要的功能,可以帮助我们通过一个SQL语句实现比较复杂的查询。但是,子查询的执行效率不高。

原因:

①执行子查询时MySQL需要为内层查询语句的查询结果建立一个临时表,然后外层查询语句从临时表中查询记录。查询完毕后,再撤销这些临时表。这样会消耗过多的CPU和IO资源,产生大量的慢查询。

②子查询的结果集存储的临时表,不论是内存临时表还是磁盘临时表都不会存在索引,所以查询性能会受到一定的影响。

③对于返回结果集比较大的子查询,其对查询性能的影响也就越大。

在MySQL中,可以使用连接(JOIN)查询来替代子查询。连接查询不需要建立临时表,其速度比子查询要快,如果查询中使用索引的话,性能就会更好

四、排序优化


问题: 在WHERE 条件字段上加索引但是为什么在ORDER BY字段上还要加索引呢?

回答:

在MySQL中,支持两种排序方式,分别是FileSortIndex排序。

  • Index排序中,索引可以保证数据的有序性,不需要再进行排序,效率更高

  • FileSort排序则一般在内存中进行排序,占用CPU较多。如果待排结果较大,会产生临时文件I/O到磁盘进行排序的情况,效率较低。

优化建议:

  1. SQL中,可以在WHERE子句和ORDER BY子句中使用索引,目的是在WHERE子句中避免全表扫描,在ORDER BY子句避免使用FileSort排序当然,某些情况下全表扫描,或者FileSort排序不一定比索引慢。但总的来说,我们还是要避免,以提高查询效率。

  2. 尽量使用Index完成ORDER BY排序。如果WHERE和ORDER BY后面是相同的列就使用单索引列;如果不同 就使用联合索引。

  3. 无法使用Index时,需要对FileSort方式进行调优。  

filesort算法:双路排序和单路排序

五、GROUP BY优化


  • group by使用索引的原则几乎跟order by一致,group by即使没有过滤条件用到索引,也可以直接使用索引。.

  • group by先排序再分组,遵照索引建的最佳左前缀法则

  • 当无法使用索引列,增大max_length_for_sort_datasort_buffer_size参数的设置

  • where效率高于having,能写在where限定的条件就不要写在having中了

  • 减少使用order by,和业务沟通能不排序就不排序,或将排序放到程序端去做

  • Order by、group by、distinct这些语句较为耗费CPU,数据库的CPU资源是极其宝贵的。

  • 包含了order by、group by、distinct这些查询的语句,where条件过滤出来的结果集请保持在1000行以内,否则SQL会很慢。

六、优化分页查询


七、优先考虑覆盖索引


1、什么是覆盖索引?

理解方式一:索引是高效找到行的一个方法,但是一般数据库也能使用索引找到一个列的数据,因此它 不必读取整个行。毕竟索引叶子节点存储了它们索引的数据;当能通过读取索引就可以得到想要的数 据,那就不需要读取行了。一个索引包含了满足查询结果的数据就叫做覆盖索引。

理解方式二:非聚簇复合索引的一种形式,它包括在查询里的SELECT、JOIN和WHERE子句用到的所有列 (即建索引的字段正好是覆盖查询条件中所涉及的字段)。

简单说就是, 索引列+主键 包含 SELECT 到 FROM之间查询的列 

2、覆盖索引的利弊 

八、如何给字符串添加索引


1、前缀索引

MySQL是支持前缀索引的。默认地,如果你创建索引的语句不指定前缀长度,那么索引就会包含整个字符串。

使用前缀索引,定义好长度,就可以做到既节省空间,又不用额外增加太多的查询成本。前面已经讲过区分度,区分度越高越好。因为区分度越高,意味着重复的键值越少。

2、前缀索引对覆盖索引的影响 

结论:
使用前缀索引就用不上覆盖索引对查询性能的优化了,这也是你在选择是否使用前缀索引时需要考虑的一个因素。

九、索引下推 ICP


面试常问

Index Condition Pushdown(ICP)是MySQL 5.6中新特性,是一种在存储引擎层使用索引过滤数据的一种优化方式。

  • 如果没有ICP,存储引擎会遍历索引以定位基表中的行,并将它们返回给MySQL服务器,由MySQL服务器评估WHERE后面的条件是否保留行。

  • 启用ICP后,如果部分WHERE条件可以仅使用索引中的列进行筛选,则MySQL服务器会把这部分WHERE条件放到存储引擎筛选。然后,存储引擎通过使用索引条目来筛选数据,并且只有在满足这一条件时才从表中读取行。

    • 好处: ICP可以减少存储引擎必须访问基表的次数和MySQL服务器必须访问存储引擎的次数。

    • 但是,ICP的加速效果取决于在存储引擎内通过ICP筛选掉的数据的比例。

1、索引条件下推使用前后

看个灵魂画图 

2、ICP的开启/关闭

3、 ICP的使用条件 

十、普通索引 vs 唯一索引


从性能的角度考虑,你选择唯一索引还是普通索引呢?选择的依据是什么呢?

1、查询过程

2、更新过程

3、change buffer的使用场景

十一、 其它查询优化策略


面试常问

1、EXISTS 和 IN 的区分

2、COUNT(*)与COUNT(具体字段)效率

3、关于SELECT(*)

在表查询中,建议明确字段,不要使用 * 作为查询的字段列表,推荐使用SELECT <字段列表> 查询。原因:

① MySQL 在解析的过程中,会通过 查询数据字典 将"*"按序转换成所有列名,这会大大的耗费资源和时 间。

② 无法使用 覆盖索引

4、LIMIT 1 对优化的影响

针对的是会扫描全表的 SQL 语句,如果你可以确定结果集只有一条,那么加上 LIMIT 1 的时候,当找 到一条结果的时候就不会继续扫描了,这样会加快查询速度。

如果数据表已经对字段建立了唯一索引,那么可以通过索引进行查询,不会全表扫描的话,就不需要加 上 LIMIT 1 了。

5、多使用COMMIT

只要有可能,在程序中尽量多使用 COMMIT,这样程序的性能得到提高,需求也会因为 COMMIT 所释放 的资源而减少。

COMMIT 所释放的资源:

  • 回滚段上用于恢复数据的信息

  • 被程序语句获得的锁

  • redo / undo log buffer 中的空间

  • 管理上述 3 种资源中的内部花费

十二、淘宝数据库,主键如何设计的?


面试中可能会问你主键如何设计,面试官主要看你的设计思想想法

1、自增ID的问题

自增ID做主键,简单易懂,几乎所有数据库都支持自增类型,只是实现上各自有所不同而已。自增ID除了简单,其他都是缺点,总体来看存在以下几方面的问题:

  1. 可靠性不高

    存在自增ID回溯的问题,这个问题直到最新版本的MySQL 8.0才修复。

  2. 安全性不高

    对外暴露的接口可以非常容易猜测对应的信息。比如:/User/1/这样的接口,可以非常容易猜测用户ID的 值为多少,总用户数量有多少,也可以非常容易地通过接口进行数据的爬取。

  3. 性能差

    自增ID的性能较差,需要在数据库服务器端生成。

  4. 交互多

    业务还需要额外执行一次类似 last_insert_id() 的函数才能知道刚才插入的自增值,这需要多一次的网络交互。在海量并发的系统中,多1条SQL,就多一次性能上的开销。

  5. 局部唯一性

    最重要的一点,自增ID是局部唯一,只在当前数据库实例中唯一,而不是全局唯一,在任意服务器间都是唯一的。对于目前分布式系统来说,这简直就是噩梦。

2、业务字段做主键

为了能够唯一地标识一个会员的信息,需要为 会员信息表 设置一个主键。那么,怎么为这个表设置主键,才能达到我们理想的目标呢? 这里我们考虑业务字段做主键。

3、淘宝的主键设计

在淘宝的电商业务中,订单服务是一个核心业务。请问, 订单表的主键 淘宝是如何设计的呢?是自增ID吗?

打开淘宝,看一下订单信息:

4、推荐的主键设计

非核心业务 :对应表的主键自增ID,如告警、日志、监控等信息。
核心业务 :主键设计至少应该是全局唯一且是单调递增。全局唯一保证在各系统之间都是唯一的,单调递增是希望插入时不影响数据库性能。

高级篇笔记PDF自取

链接:https://pan.baidu.com/s/1pVqrTwIZFoED77i-EFmw6g?pwd=3333 
提取码:3333

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

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

相关文章

【Web服务器】Nginx+Tomcat负载均衡、动静分离群集

文章目录 一、Tomcat 简介1. Tomcat 重要目录 二、Nginx 负载均衡1. Nginx 应用2. Nginx 负载均衡实现原理2.1 正向代理2.2 反向代理2.3 负载均衡原理总结2.4 配置方向代理的主要参数2.5 Nginx 代理转发类型 3. Nginx 负载均衡模式3.1 rr 轮询 负载均衡模式3.2 least_conn 最少…

优秀测试工程师简历要怎么写?为什么连面试都过不了?

目录 前言 简历请用数字化结果不要只是堆砌工作经历 简历一&#xff1a;我的工作内容有&#xff1a; 简历二&#xff1a;我的工作内容有&#xff1a; 千万别小瞧 了解你的过去是判断你未来的最好方式 增加好印象&#xff0c;记住这些小Tips 1&#xff09;了解公司的特点 2&…

sms开发文档

sms系统设计参考毕业设计-----------学生选课管理系统的设计 一、使用axios 来实现网页中ajax请求 首先说到axios&#xff0c;是一个类库&#xff0c;他的底层基于ajax库&#xff0c;通常用于ajax请求 ajax又是什么 ajax是一种创建快速动态网页的技术&#xff0c; 传统的页…

CiteSpace中心性\引文突现及S值和Q值含义

​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; ​ 编辑切换为居中 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; 中心性为0的解决方法 中文数据的作者&#xff0c;机构由于发文量太少&#xff0c;点过之后…

Linux:Mysql数据库的安装与简单部署。

涉及版本&#xff1a; 安装MySQL需要用到yum命令来安装。 但是yum的仓库内&#xff0c;并没有MySQL的压缩包&#xff0c;因此需要额外搞一个有MySQL的压缩包的远程yum仓库&#xff0c;进行安装MySQL。 想搞到这个yum仓库&#xff0c;就只能到网站下载。 5.7版本&#xff1a; …

Promise-用法

目录 1.处理异步的几种方案 2.理解 3.promise状态&#xff1a;初始化 4.执行异步任务 5.执行异步任务成功 6.执行异步任务失败 7.执行异步任务成功-返回 8.执行异步任务失败-返回 1.处理异步的几种方案 纯粹callback&#xff0c;会剥夺函数return的能力promise&#xf…

浅析kubernates的pv和pvc

文章目录 概要名词解释什么是Pod什么是StorgeClass静态PV和动态PVPV和PVC的生命周期 PVC &#xff0c; PV和 StorageClass的关系小结 概要 最近&#xff0c;在看许多Kubenates的相关文章的时候&#xff0c;了解到了一个概念&#xff0c;是我之前不清楚的。–PV&PVC 。那么今…

Java010——Java八大基本数据类型的进一步学习

前言&#xff1a;前面文章Java009——Java数据类型&变量的简单认识中我们学习了Java数据类型&变量&#xff0c;也简单介绍了Java八大基本数据类型。下面我们继续学习Java八大基本数据类型 回顾&#xff1a;Java八大基本数据类型 大类 类型名称 关键字 占用内…

理性讨论,4年经验,面试要20K很高吗?....

普通二本&#xff0c;4年多测试工作经验&#xff0c;现在依然在测试岗位&#xff0c;只是时间长了和一些个人原因有跳槽的想法&#xff0c;懂python&#xff0c;会写脚本&#xff0c;会selenium&#xff0c;会性能&#xff0c;本来信心满满的&#xff0c;像这样优秀的人找份高薪…

CAN304 计算机安全

本笔记来自基友 加特-林 Lec1: Computer security的概念&#xff0c;一些术语&#xff0c;攻击类型 CIA Lec2&#xff1a;对称加密&#xff0c;Shift cipher&#xff0c;Vigenere&#xff0c;AES&#xff0c;块加密 私钥加密的别称为对称加密 比如shift cipher&#xff…

腾讯、阿里入选首批“双柜台证券”,港股市场迎盛夏升温?

6月5日&#xff0c;香港交易所发布公告&#xff0c;将于6月19日在香港证券市场推出“港币&#xff0d;人民币双柜台模式”&#xff0c;当日确定有21只证券指定为双柜台证券。同时&#xff0c;港交所还表示&#xff0c;在双柜台模式推出前&#xff0c;更多证券或会被接纳并加入双…

Allegro16.6详细教程(三)

確定Pad的層面 (1)用Single layer mode開關來控制pad type 勾選Single layer mode,則pad為單面孔,比如SMD 不勾選Single layer mode,則pad為通孔,比如:via (2)用滑鼠左鍵點選BEGIN LAYER彈出下面3個欄位 Regular, Thermal Relief, Anti Pad;Regular用於正片,Thermal R…

Nginx + Tomcat 反向代理,负载均衡,动态分离

这里写目录标题 一. Nginx的引入背景公司产品出现瓶颈&#xff1f; 二 nginx 和 Tomcat 的关系三. 什么是Nginx &#xff1f;&#xff08;1&#xff09;Nginx 是什么&#xff1f;(2) Nginx 特点&#xff1a; 四. Nginx作用&#xff1f;1. 反向代理&#xff1a;2. 负载均衡3. 动…

TURTLEBOT3 Burger Waffle Pi 对比

TurtleBot3简介 TurtleBot3是TurtleBot系列中的第三代产品&#xff0c;它在二代的基础之上做了一些改进&#xff0c;并开发了一些新功能&#xff0c;以补充其前身缺乏的功能和满足用户的需求。 TurtleBot3采用机器人智能驱动器Dynamixel驱动&#xff0c;是一款小型的、可编程…

运维小白必学篇之基础篇第十八集:DNS和DHCP中继实验作业

DNS和DHCP中继实验作业 目录 DNS和DHCP中继实验作业 题1&#xff1a;实现DNS服务 服务器&#xff1a; 客户端&#xff1a; 题2&#xff1a;实现DHCP中继服务 服务端配置如下&#xff1a; 客户端配置&#xff1a; 服务端配置&#xff1a;(vmware11) 中继服务器端配置&…

能听懂语音的ChatGPT来了:10小时录音扔进去,想问什么问什么

类 ChatGPT 模型的输入框里可以粘贴语音文档了。 大型语言模型&#xff08;LLM&#xff09;正在改变每个行业的用户期望。然而&#xff0c;建立以人类语音为中心的生成式人工智能产品仍然很困难&#xff0c;因为音频文件对大型语言模型构成了挑战。 将 LLM 应用于音频文件的一…

SpringBoot入门程序以及启动方式 - 项目中切换服务器依赖

文章目录 SpringBootSpringBoot入门程序SpringBoot快速启动SpringBoot基本介绍SpringBoot切换服务器 SpringBoot SpringBoot入门程序 SpringBoot入门程序步骤如下: 创建新模块&#xff0c;选择Spring初始化&#xff0c;并配置模块相关基础信息 选择当前模块需要使用的技术集 …

你真的会写用例吗?自动化测试用例如何编写?看着资深测试的总结...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 Python自动化测试&…

Rocky9配置固定IP

vim /etc/NetworkManager/system-connections/enp4s0.nmconnection[ipv4] methodmanual # 子网掩码为 255.255.254.0 address1192.168.1.207/23,192.168.1.1 # 如果子网掩码为 255.255.255.0 则使用下面配置 # address1192.168.1.207/24,192.168.1.1 dns192.168.1.200;45.116.2…

Springcloud--异步通信RabbitMq

RabbitMQ 1.初识MQ 1.1.同步和异步通讯 微服务间通讯有同步和异步两种方式&#xff1a; 同步通讯&#xff1a;就像打电话&#xff0c;需要实时响应。 异步通讯&#xff1a;就像发邮件&#xff0c;不需要马上回复。 两种方式各有优劣&#xff0c;打电话可以立即得到响应&am…