Sql查询慢的原因剖析
2019-10-24 本文已影响0人
麻帅帅
我们做服务端开发离不开数据库操作,那么执行一条sql发现很慢可以怎么解决呢,下面我就来简单的分析下,仅仅是个人见解,如有不对之处多多指教。
首先sql执行的慢分俩处:要么本身sql写的有问题导致执行起来耗费大量时间,要么sql本身没有问题只是偶尔执行时间缓慢。
先说sql假如没有问题,就是偶尔会出现慢,那么是什么原因导致的呢。本人觉得大概有2点原因:1、数据库内存发生了脏读,需要刷新;2、由于程序的不健壮导致死锁或锁等待……
首先,我们都知道数据库在更新或者是插入一条数据的时候,并不会把数据先更新到磁盘里,而是先刷新的内存当中去,而是先将这些数据写入到redo log日志(数据库中的undo日志、redo日志、检查点)当中去。再通过 redo log 里的日记把最新的数据同步到磁盘中去。redo log 里的容量是有限的,如果数据库一直很忙,更新又很频繁,这个时候 redo log 很快就会被写满了,这个时候就没办法等到空闲的时候再把数据同步到磁盘的,只能暂停其他操作,全身心来把数据同步到磁盘中去的,而这个时候,就会导致我们平时正常的SQL语句突然执行的很慢,所以说,数据库在在同步数据到磁盘的时候,就有可能导致我们的SQL语句执行的很慢了。
其实就是当我们在执行sql时,由于被其他操作导致未及时释放锁,进而产生锁表、锁行的行为,以至于我们在执行sql处于持续等待直到占有的锁释放呗(MySQL锁)。
Sql本身写的有问题,主要从优化的角度说说,表是否建索引、是否使用锁引。