首页 > 编程知识 正文

mysql优化配置,索引对update的影响

时间:2023-05-04 20:44:16 阅读:159595 作者:2282

什么是索引下降?

“索引”(index condition pushdown )简称ICP,用于在Mysql5.6版本中优化查询。

如果不使用ICP,当使用非主键索引(也称为常规索引或辅助索引)进行查询时,存储引擎会从索引中检索数据并将其返回给MySQL服务器,条件是数据是必需的

使用ICP时,如果存在已索引列的确定条件,MySQL服务器会将部分确定条件传递给存储引擎,存储引擎通过确定索引是否满足MySQL服务器传递的条件来索引

通过优化索引,可以减少存储引擎查询基础表的次数,以及MySQL服务器从存储引擎接收数据的次数。

斩钉截铁

开始之前准备用户表(user )。 主要字段为id、name、age和address。 创建合并索引(name,age )。

假设有一个需求,需要匹配名称开头为陈的所有用户。 sql语句应类似于以下内容:

SELECT* fromuserwherenamelike '陈% '基于“最佳左前缀”原则,这里使用连接索引(name,age )进行查询。 毫无疑问,它的性能高于全表扫描。

发生了问题。 如果有其他条件呢? 假设还有一个需求,要求名字的第一个字母是陈,与年龄为20岁的用户匹配。 此时的sql语句如下所示。

如何执行名为SELECT* fromuserwherenamelike '陈%'andage=20的sql语句? 分析Mysql5.6之前的版本和更高版本。

1.Mysql5.6之前的版本

在5.6之前的版本中,没有“下推索引”优化,因此执行了如下图所示的过程。

忽略名为age的字段,直接用name进行查询。 在(name,age )这个树中,两个结果发现各自的id为2,1。 然后,该过程需要回表两次,因为它一次返回一个具有检索到的id值的表查询。

2.Mysql5.6及之后版本

5.6版中添加了一个名为“索引下移”的优化,并执行了如下图所示的流程。

InnoDB并不忽视age这个字段,而是在索引内部判断age是否等于20,对于不等于20的记录直接跳过,所以在名为name,age]的索引树中为一个记录此时,带着这个id返回主键索引树,检查所有数据。 此过程只需回表一次

3.实践

当然上述分析是原理性的,我们来实战性分析一下吧。 因此,我们在薄弱的画板上安装了Mysql 5.6版的MySQL,并对上述语句进行了分析。 下图:

根据explain的分析结果,Extra的值为Using index condition,表示使用了索引下拉菜单。

总结

将索引推送到非主键索引的优化可以有效地减少返回表的次数,大大提高查询的效率。

要关闭索引下移,请使用以下命令: 不说明配置文件的更改。 为什么这么好的功能关闭了呢?

set optimizer _ switch=' index _ condition _ push down=off '; 小道消息

最近发表的文章收到了很多读者的反馈,为了方便大家一起学习交流,弱小的画板建立了技术交流群,感兴趣的朋友可以参加一下

过去的推荐

Mysql性能优化:为什么要覆盖索引?

SQL查询语句是如何执行的?

SpringCloud 2020新视频发行版

幂等性如何实现? 带你去解开一波!

靓靓,集成SpringBoot还在找配置吗? 老司机会告诉你的!

老司机带你谈谈接口限制!

Spring解决了循环依赖。 你真的明白了吗?

老司机会带你从源代码进入Spring生命周期!

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。