相信大家一定都有遇到过mysql更新数据库很慢的问题,那么这究竟是什么导致的呢?为什么会慢?又应该如何去解决呢?下面一起来了解一下吧!
一、使用不恰当的sql语句
具体的可以看看下面的例子:
在第一条SQL语句当中,where查询语句当中,出现了null,那么这个时候数据库的引擎将不会使用索引,反而,是会对全表扫描一次,那么这样的结果就是慢。
如何解决?
这里,可以使用0来代替null,也就是第二条SQL语句。
注意:
1、在查询的数据表当中,假如,使用了update、delete、insert太过于频繁的话,那么可以去尝试使用optimize table来存放,索引,存储文件。
2、Select for update,假如,条件的字段没有使用索引的话,那么就会导致对全表进行查询,而不是对特定的行进行查询。
二、外部的硬件因素
外部的硬件因素能够直接对MySQL服务器性能的系统指标(例CPU、内存、磁盘等)的使用情况造成影响。
使用vmstart查看服务器资源使用情况:
依据上面的结果,能够看出,磁盘的数据写入比较的大、CPU负载比较的高,那么,这个时候,就要对正在运行的程序进行优化,减小资源负载。
三、MySQL参数设置存在问题
1、max_connect_errors
正常的情况下,「max_connect_errors 」的默认值是10。
是用来表示受信账号错误的连接次数的。
在这个次数达到了10以后,MySQL服务器就会被自动阻塞住了
例:
如何解决?
在出现了这样的问题之后,要用flush hosts来解决。
注:max_connect_errors代表着连接中断重复请求连接的次数
对于内网来讲的话,建议把max_connect_errors的数量设置大于10000,这种设置可以不会轻易的就发生阻塞。
并且你还要定期进行 flush hosts
2、connect_timeout
connect_timeout代表MySQL等待应答连接报文的最大秒数,在超过了这个时间之后,则代表MySQL连接失败。
这个默认时间是5S,所以,在系统处在了高并发的状态之下,就非常容易会发生超时,所以,就建议将connect_timeout设置成10-15秒是最适合的。
3、master-connect-retry
master-connect-retry代表的是在重新建立主从连接的时候,在出现了连接失败之后,间隔多久能够重试上述过程。
建议把这个值设置的大一点。
以上就是关于mysql更新数据库慢出现的原因以及解决方法了,你都了解了吗?更多关于mysql的知识,欢迎多多关注奇Q工具网的java架构师栏目了解哦。
推荐阅读: