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优化小结(插入和查询)
- 优化mysql实验(explain;索引)+利用 index、explain和profile优化mysql数据库查询小结
- 对应用程序角度的MySQL查询优化的一点个人小结
- MySQL查询优化小结
- 浅谈MySQL中优化sql语句查询常用的30种方法
- mysql查询时,offset过大影响性能的原因与优化方法
- mysql 查询重复的(不区分大小写)数据的SQL优化
- mysql优化SELECT语句和其它查询
- MySQL巧用sum,case...when...优化统计查询
- MySQL查询优化技术系列讲座之使用索引
- 【高性能MySQL】读书摘录5-第6章、查询性能优化
- mysql的一些查询优化,count优化,limit优化
- Mysql 多表联合查询效率分析及优化
- MySQL SQL优化案例:相关子查询(dependent subquery)优化
- mysql性能优化-慢查询分析、优化索引和配置
- mysql性能优化-慢查询分析、优化索引和配置
- mysql 查询优化
- mysql中优化sql语句查询的30种方法
- MySQL查询优化之explain的深入解析
- MySql left join 多表连接查询优化语句