SQL查询是否存在的优化 千万不要使用count了

在实际的应用环境当中 我们通常会查询是否有满足条件记录 在数据库中是否存在 满足查询条件的记录可能有一条或者多条 但是只要有 就表示存在 通常思路是直接 count,count出来的结果如果大于0 则存在 反正则不存在!

select count(*) from table where a = 3 and b = 5

后台拿到结果

int num = findIsExistDao.getNum(params);
if (num > 0) {
    // 存在的代码
} else {
    // 不存在的代码
}

这样做在SQL层面 如果是超大数据量 那么耗时可想而知 count数都要数很久

但是我们只是想要查看是否有满足条件的记录存在于数据库中 不管他是只有一条 还是多条 只要有 那么就存在 没有 则不存在 所以可以使用以下的方法来判断:

select 1 from table where a = 3 and b = 5 limit 1

惊不惊喜 意不意外 只需要合理使用Limt 取一条数据即可 存在则直接返回1 没有的话 则为空值 毕竟我们的需求是判断库中是否有满足条件的字段 只要有 就满足

这样的话 java代码中就可以稍微的改一下了:

Integer exist = findIsExistDao.getNum(params);
if (exist != null) {
    // 存在的代码
} else {
    // 不存在的代码
}

细心的小伙伴肯定会看到Java代码里面 上面的使用的是Int来接收 下面这里使用的是Integer来接收 count查询出来没有就是0 所以返回回来的肯定不为空值的 int是不能存放空值的 所以使用他的包装类。

认真分析需求 注重细节 掌握一些小技巧 能大大提高系统的性能问题

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值