SQL语句运行很慢一般分为两种情况:
首先是大多数情况很正常,偶尔会很慢,有可能是数据库在刷新脏页,比如是redo log 写满了需要同步到磁盘,或者是执行的时候遇到锁,我们可以用 show processlist这个命令来查看当前的状态。这种情况下我们不需要对SQL语句进行优化。
然后是某一条 SQL 语句一直执行的很慢,可能的原因有没有用到索引,例如该字段没有索引;由于对字段进行运算、函数操作导致无法用索引,或者是数据库选错了索引。这种情况是我们要关心的,需要进行SQL语句的优化,简单来说就是该用索引就要用索引,避免全表扫描。
语句优化的几种方法:
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。
2.应尽量避免在 where 子句中使用!=或<>操作符,并正确使用表达式查询,否则将引擎放弃使用索引而进行全表扫描。
错误:
select * from t where c - 1 = 1000;
正确:
select * from t where c = 1000 + 1;
3.应尽量避免在 where 子句中对字段进行 null 值判断:
select id from t where num=0
4.应尽量避免在 where 子句中使用 or 来连接条件:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
5.in 和 not in 也要慎用,否则会导致全表扫描
参考:https://www.cnblogs.com/Little-Li/p/8031295.html