mysql多表查询优化SQL

今天偶尔在优化一个查询功能的时候心血来潮想写点东西跟大家分享下经验!!


MySQL优化查询(一对多):

1、使用left join(right join),在很多数据的时候尽量避免直接使用where语句 .... and .... and ...这类写法,假设三张表每张表有一千条数据,本意想查出<=1000条数据,当使用where语句查询,就查出了1000*1000*1000=10亿条数据,很大程度上浪费了内存执行时间


2、需要哪些列就查哪些列,不要有很多冗余的列查询出来,有的时候一张表当中有好几十个字段,我们需要的可能就是其中的三四个或者四五个字段,在这样的情况下,我们就直接查这几个我们需要的字段就可以了


3、尽量避免使用  .*  ,因为使用点* 需要先去数据字典当中查找你所查找的表当中所拥有的字段,再转换成对应的字段的放在select后面查询出来


4、大于号(>)永远比(>=)执行更慢


5、查询的时候我们应该把更具有限制条件的条件语句放在最前面,比如我们有一张学生成绩表(score),分别有学号、语数英三科成绩以及总成绩总共五列,要查找数学、英语优秀,语文及格,总成绩再前一百名的人

select * from score where sno in(select sno from score where language>60 and math>80 and english>80 order by total_score desc)(慢)

select sno,language,math,english,total_score from score where sno exist (select sno from where engilsh>=80 and math>=80 and language>=80 order by total_score desc)(快)

上面那条语句将大于60分的条件放前面,大于80的放后面,导致很多情况下多查了很多数据

就比如说一张表里有有很多字段,有一百万条记录,主键id由1到1百万,当我们需要查找小于1000大于100的数据的时候,我们就应该把小于1000这个条件放前面,这就是相对比下最具限制性的条件

你可能感兴趣的:(mysql多表查询优化SQL)