码迷,mamicode.com
首页 > 数据库 > 详细

MySQL之SQL语句的优化

时间:2018-04-16 14:32:04      阅读:230      评论:0      收藏:0      [点我收藏+]

标签:bsp   写在前面   sql   索引   将不   查询   name   语句   替换   

仅供自己学习

 

结论写在前面:

1、尽量避免进行全表扫描,可以给where和order by涉及的列上建立索引

2、尽量在where子句中使用 !=或<>操作符,因为这样会导致引擎放弃索引而进行全表扫描

3、尽量避免在where子句中对字段进行null的判断(如:select id from t where age is null )

4、尽量避免在where子句中使用or来连接条件,否则将会导致引擎放弃索引而进行全表扫描(如:select id from t where num=10 or num=20 ,可以union all:select id from t where num=10 union all select id from t where num=20 )

5、尽量避免在like查询中使用2个%来查询,否则进行全表扫描(如:select id from t where name like ‘%abc%‘ )

6、尽量避免在where子句中使用in和not in来查询,否则进行全表扫描(如:select id from t where num in(1,2,3) ,可以使用between:select id from t where num between 1 and 3 )

7、尽量避免在 where 子句中对字段进行表达式操作,否则进行全表扫描(如:select id from t where num/2=100 ,可以:select id from t where num=100*2 

8、尽量避免在where子句中对字段进行函数操作,否则进行全表扫描

9、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。

10、很多时候用 exists 代替 in 是一个好的选择(如: select num from a where num in(select num from b) ,可以替换:select num from a where exists(select 1 from b where num=a.num) )

11、任何地方都不要使用 select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。 

MySQL之SQL语句的优化

标签:bsp   写在前面   sql   索引   将不   查询   name   语句   替换   

原文地址:https://www.cnblogs.com/chenhaoyu/p/8855529.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!