SQL语句优化的理解

URML 2020-07-04

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

相关推荐