<返回更多

mysql更新一条数据很慢,怎么办?

2019-08-02    
加入收藏

对于数据库而言,只要做好数据存储工作就行了,但对于SQL而言,执行效率是很重要的指标。目前主流的关系型数据库都自带了查询分析器和优化器,能自动对我们编写的SQL进行最优处理,即便如此,SQL执行慢的现象还是不可避免的。虽说SQL语句执行慢是大家经常遇到的,但背后原因并不简单。

SQL执行是偶尔慢还是一直慢?

这一点很重要,SQL语句执行速度偶尔慢和一直慢的背后因素是不同的,自然要分场景来分析问题。

SQL执行偶尔慢的原因分析

如果一条SQL语句绝大多数情况下都是正常的,偶尔出现慢的情况,那一般来说此SQL语句问题不大,可能是其它因素影响了它的执行效率,比如:

1、服务器内存不足

若查询量大,而查询的数据页又不在内存中时,就需要申请内存,此时一旦内存不足就会淘汰一些内存数据,这些操作就会影响SQL执行速度。

2、日志文件过大

数据库在同步日志及数据到磁盘上时,也会影响SQL执行效率。

3、无法获取锁

当我们在操作数据时,若别人也在用这张表而且加锁了,我们无法获取到锁,只能等待他人释放锁,这个很影响SQL效率。

SQL执行一直慢的原因分析

如果数据量级不变,而某条SQL执行时一直都很慢,那就需要看看SQL语句写法是否存在问题了,另外数据库的一些配置是否存在问题,比如:

1、相关字段是否建有合适的索引?

比如更新操作,如果加了where条件,而条件列字段没有索引,那就意味着要全表扫描,这样一来SQL慢也就是正常现象了。

2、字段有索引,但SQL并没有用到此索引

并不是说我们对字段创建了索引,索引就一定会生效。在某些情况下,一些SQL写法会导致索引失效,比如在索引列上使用了函数。

3、系统采样统计失误导致系统没有使用索引而是全表扫描,此时需要强制使用索引

SQL执行时,数据库系统会进行一个预测:看是走索引扫描的行数少,还是全表扫描的行数少。索引基数是通过采样来统计的,存在一定误差,如果误差过大那可能会使系统错误的决定使用全表扫描,此时我们可以在SQL中声明强制走索引查询。

4、硬件限制

如果服务器CPU及磁盘读写速度低、内存小,那同样会影响整个数据库性能。

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>