您的位置:首页 > 数据库 > MySQL

MySQL查询优化小结

2017-05-09 12:46 288 查看

有索引,但是没有使用到

避免
Like
参数以通配符在前,提倡通配符在后使用。

例如,
select xx from table where name like ‘%Hi’


这样即使在name上面存在索引,也会进行全表扫描,不建议使用。

而使用,
select xx from table where name like ‘Hi%’


会用到索引,这种方法是值得提倡的。

最左前缀原则

这是针对多列索引而言的。

例如有三个列,name、age和sex,我们创建联合索引(name,age,sex),那么此时相当于创建了(name)、(name,age)、(name,age,sex)三个和name相关的索引。

此时,
select xx from table where name='xxx' and age='xxx'
,是显然会使用到索引的。

然而,
select xx from table where age='xxx' and sex='xxx'
,却不会使用到索引。

所以,需要根据业务需求,将最常用的列放在联合索引的最左边。

避免使用
!=
<>
操作符,
>
或者
<
会比较高效。

避免索引列参与计算

这个很好理解,例如
select xx from table where price+1>100
,是不会使用到索引的。

避免对字段进行
is null
判断

例如,
select xx from table where name is null
,会进行全表扫描。

解决的方法是,可以把null的数据用0代替,查询语句即为,
select xx from table where name='0'


避免使用
or
,需要采用
union all
替代

where
条件中,我们经常会使用到
or
来作为查询条件,但是这样是会进行全表扫描的。

例如,
select xx from table where name='xxx' or name='xxx'


这时用
union all
可以避免上述问题,
select xx from table where name='0' union all select xx from table where name='xxx'


避免使用
select *

order by
进行优化

group by
进行优化

group by
用于分组,需要将不需要的数据在分组前过滤掉,以提高效率。

错误的示范,

SELECT JOB , AVG(SAL)
FROM EMP
GROUP by JOB
HAVING JOB = ‘PRESIDENT’ OR JOB = ‘MANAGER’


正确的示范,

SELECT JOB , AVG(SAL)
FROM EMP
WHERE JOB = ‘PRESIDENT’ OR JOB = ‘MANAGER’
GROUP by JOB


exists
代替
in
进行优化

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  mysql 优化