顺序不同,性能大相径庭 -- 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语句放在最前面,最先执行,可以提高查询效率。

    

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值