顺序不同,性能大相径庭 -- mysql where子句优化

       在用mysql数据库,做一个查询语句的时候,因为用到子查询,所以效率很低。据说改成join连表查询,可以提高效率,还据说,从mysql5.6版本开始,mysql已经对子查询进行了优化。因为不是本文主题,所以暂且不表。

       我是用sql语句,实现对一个表里的记录,去重的功能。表中有一个url字段,原来是设置了unique唯一性要求,但是插入的时候效率受影响,所以就取消掉了。

 因为用到了 in 子查询,每次执行都要等好久,次数多了有点不胜其烦,只好坐下来想解决的办法。原来的sql查询是这种样子的:

1.create table temp select id from crawldb group by url;

        2.delete  from crawldb  where id not in( select * from temp) and p ="a";

 后来一想,p=“a” 可以过滤掉大部分记录, 所以尝试把它写在前面,语句2就成了这样:

delete  from crawldb  where p ="a" and  id not in( select * from temp);

然后发现效率提升了几十倍。 本来想当然认为mysql会自动优化where字句的顺序,看来至少现在这个版本还没有。


总结:把过滤能力强的sql语句放在最前面,最先执行,可以提高查询效率。

    

你可能感兴趣的:(顺序不同,性能大相径庭 -- mysql where子句优化)