MySql为什么查询慢

目录

前言:

一、数据库查询流程:

第一步:编译器拿着账号密码向MySql建立一条网络连接

第二步:

二、导致Mysql查询慢的原因

2.1:慢查询

2.2:连接数过小

解决方法:多建几条连接

2.3:Buffer pool过小

结尾:


前言:

在当今数字化的时代,数据的存储和管理至关重要。MySQL 作为一款广泛使用的关系型数据库管理系统,在众多应用场景中发挥着关键作用。然而,我们常常会遇到 MySQL 查询慢的问题,这不仅影响了工作效率,也可能给用户体验带来负面影响。那么,究竟是什么原因导致了 MySQL 查询变慢呢?在接下来的这篇博客中,我们将深入探讨 MySQL 查询慢的各种可能因素,并提供一些实用的解决方案。

一、数据库查询流程:

第一步:编译器拿着账号密码向MySql建立一条网络连接

第二步:

1、MySql会对这条网络连接进行管理,建立连接后,编译器执行一条Sql语句,将Sql语句通过网络连接传给Mysql。

2、Mysql会先将这条sql给分析器进行分析,判断是否有语法错误。

3、接下来是优化器,他会根据规则来选择该用什么索引

4、之后执行器会调用存储引擎的接口函数,存储引擎是真正读写数据的地方(现在最常用的是Innodb)

5、因为Innodb读写磁盘比较慢,所以Innodb内加了一层内存提速(Buffer pool)里面有行数据也有索引数据,Sql到了Innodb中,会根据前面的优化器选定的索引,去查询相应的索引页,如果索引页不在BUffer pool里,他就会从磁盘加载到Buffer pool里,再查询索引页,根据索引页,查询得到数据页中的数据,如果数据页中没有这行数据,也是从磁盘中加载出来,放到Buffer pool中。最后再将数据返回给客户端(感觉套路和Redis差不多)

二、导致Mysql查询慢的原因

2.1:慢查询

慢查询是因为索引使用不当导致的,可以用explain方法来进行排查。

2.2:连接数过小

Mysql方面:

MySql连接管理是管理客户端和Mysql之间的长连接,如果只有一条连接,但是有大量并发请求,那肯定容易出现,传输Sql时发生阻塞,导致等待时间过长。所以有时候查询日志时,一条Sql查询了几分钟,但实际单独执行只需要几毫秒。

解决方法:多建几条连接

连接数过小的问题受客户端和Mysql二者的约束。mysql的连接数默认是100,最大可以达到16384,可以通过这条命令设置数据库连接大小为500

mysql> set global max_connections=500;

 客户端方面:

客户端方面的连接和Mysql之间的是基于TCP的长连接,建立长连接时比较耗时,所以我们会建立一个长连接池

扩大连接池的方法

连接池也有个容量大小,这里通过ORM库进行调节,照着官方文档改改就好

2.3:Buffer pool过小

1、如何判断buffer pool是否小了?

打开Mysql终端

计算命中率

一般来说:命中率<99%才需要考虑Buffer pool的大小 

设置Buffer pool大小

结尾:

通过对 MySQL 查询慢的原因进行深入分析,我们可以看到,查询性能的优化是一个综合性的工作,需要从多个方面入手。从数据库设计到查询语句的优化,从硬件配置的提升到索引的合理使用,每一个环节都可能对查询速度产生重大影响。希望本文所提供的内容能够帮助大家更好地理解和解决 MySQL 查询慢的问题,从而提高数据库的性能和效率,为我们的应用程序提供更加稳定和快速的数据服务。让我们一起努力,打造更加高效的数据库系统,为数字化时代的发展贡献自己的力量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值