mysql select count(*) 优化

最近一直在做微服务的压测和改善,从代码层面,逻辑层面,结合业务进行了调整,下面是关于sql层面的优化点:

一般我们判断记录是否存在,都会在mapper.xml中写如下的sql

select  count(*) from xxx_0000 where is_deleted='N';

使用datagrip执行上面的sql,在控制台可以看到如下输出:
在这里插入图片描述
返回一条记录,耗时1s 690ms

下面是对这条sql进行优化的改写:

select count(*) from xxx_0000 where is_deleted='N' limit 1;

同样使用datagrip执行上述的sql,可以在控制台看到如下的输出:

在这里插入图片描述
相同的表和where条件,后者只是加了limit 1,效率提升了不少。

当然是否采用加limit 1的限制条件,是需要结合业务需求的,如果你count只是为了判断是否存在记录,那么加上limit 1,响应时间肯定会有提高,但是如果你count是为了得到该符合查询条件的个数,那么可能加limit 1的结果并不是你想要的。

总结:对于sql的优化,不单单是加索引之类,还需要结合业务需求去优化sql的逻辑和索引字段等。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值