在用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语句放在最前面,最先执行,可以提高查询效率。