索引、nacos、getway

mysql模糊查询索引失效问题及解决方案-CSDN博客

索引失效就是我们明明在查询时的条件为索引列(包括自己新建的索引),但是索引不能起效,走的是全表扫描。explain 后可查看type=ALL。

这是为什么呢?

首先介绍有以下几种情况索引会出现失效:

  • 当我们使用了左模糊匹配和左右模糊匹配的时候,像like ‘%str’或者‘%str%’。
  • 当我们使用联合索引没有遵守最左匹配原则的时候。
  • 当我们使用索引时对其索引字段进行计算、函数、类型转换的操作。
  • 当我们在where条件子句中使用了OR运算,同时OR前为索引列,OR后的条件不是索引列。
    以上几种情况均会引起索引失效。
1、第一种情况:左模糊匹配和左右模糊匹配

但在现实问题里,往往需要把%放在开头作模糊匹配。这是我们可以通过覆盖索引的方式即索引覆盖查询,来解决索引失效的问题。

把查询列换成索引与之相应的列,索引失效问题得以解决。

2、对索引使用函数

为什么对索引使用函数,就无法走索引了呢?

因为索引保存的是索引字段的原始值,而不是经过函数计算后的值,自然就没办法走索引了。

不过,从 MySQL 8.0 开始,索引特性增加了函数索引,即可以针对函数计算后的值建立一个索引,也就是说该索引的值是函数计算后的值,所以就可以通过扫描索引来查询数据。

3、对索引进行表达式计算

在查询条件中对索引进行表达式计算,也是无法走索引的。

为什么对索引进行表达式计算,就无法走索引了呢?

原因跟对索引使用函数差不多。

因为索引保存的是索引字段的原始值,而不是 id + 1 表达式计算后的值,所以无法走索引,只能通过把索引字段的取值都取出来,然后依次进行表达式的计算来进行条件判断,因此采用的就是全表扫描的方式。

4、对索引隐式类型转换

如果索引字段是字符串类型,但是在条件查询中,输入的参数是整型的话,你会在执行计划的结果发现这条语句会走全表扫描。

但是如果索引字段是整型类型,查询条件中的输入参数即使字符串,是不会导致索引失效,还是可以走索引扫描。

为什么第一个例子会导致索引失效,而第二例子不会呢?

 MySQL 在遇到字符串和数字比较的时候,会自动把字符串转为数字,然后再进行比较

5、联合索引非最左匹配

对主键字段建立的索引叫做聚簇索引,对普通字段建立的索引叫做二级索引。

那么多个普通字段组合在一起创建的索引就叫做联合索引,也叫组合索引。

创建联合索引时,我们需要注意创建时的顺序问题,因为联合索引 (x, y, z) 和 (z, y, x) 在使用的时候会存在差别。

联合索引要能正确使用需要遵循最左匹配原则,也就是按照最左优先的方式进行索引的匹配。

为什么联合索引不遵循最左匹配原则就会失效?

原因是,在联合索引的情况下,数据是按照索引第一列排序,第一列数据相同时才会按照第二列排序。

也就是说,如果我们想使用联合索引中尽可能多的列,查询条件中的各个列必须是联合索引中从最左边开始连续的列。如果我们仅仅按照第二列搜索,肯定无法走索引。

6、WHERE 子句中的 OR

在 WHERE 子句中,如果在 OR 前的条件列是索引列,而在 OR 后的条件列不是索引列,那么索引会失效。

举个例子,比如下面的查询语句,id 是主键,age 是普通列,从执行计划的结果看,是走了全表扫描。

select * from t_user where id = 1 or age = 18;

图片

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

要解决办法很简单,将 age 字段设置为索引即可。

Nacos配置中心实现原理主要基于以下几个核心步骤与技术机制:

  1. 服务发现与注册

    • 原理:Nacos作为服务发现组件,允许微服务实例在启动时向Nacos Server注册自身信息(如IP地址、端口号等)。这一步骤通过集成nacos-discovery-spring-boot-starter完成,应用会在application.properties中配置Nacos服务器地址,如nacos.discovery.server-addr=127.0.0.1:8848。服务实例通过Nacos提供的API(

      创建一个服务 请求类型POST 删除一个服务,请求类型DELETE  修改一个服务,请求类型PUT  查询一个服务 请求类型GET

      请求路径都是

      /nacos/v1/ns/service
      )进行注册。
  2. 配置管理

    • 原理:Nacos提供了一个集中式的配置存储和管理系统,允许应用在运行时从Nacos Server动态获取或更新配置信息。应用通过集成nacos-config-spring-boot-starter与Nacos配置服务交互,在application.properties中配置Nacos服务器地址后,可以在代码中使用@NacosPropertySource注解加载特定的配置文件(dataId),并通过@NacosValue注解注入配置值。Nacos支持配置的实时推送更新,当配置发生变化时,会通知所有订阅该配置的服务实例。

@NacosValue 注解通过设置 autoRefreshed = true 可以实现配置动态刷新,当 Nacos 配置发生变化时,自动更新对应的属性值。

【Nacos】Nacos原理详解(注册中心,配置中心)_nacos配置中心原理-CSDN博客

Open API 指南 (nacos.io)

网关GateWay的使用详解、路由、过滤器、跨域配置_网关gateway图解-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值