MySQL判断是否"存在",除了用count,这个办法更快捷!

根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要SELECT count(*) 呢?无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的count。

目前多数人的写法

多次REVIEW代码时,发现如现现象:业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。普遍的SQL及代码写法如下:

##### SQL写法:  
SELECT count(*) FROM table WHERE a = 1 AND b = 2  
  
##### Java写法:  
int nums = xxDao.countXxxxByXxx(params);  
if ( nums > 0 ) {  
  //当存在时,执行这里的代码  
} else {  
  //当不存在时,执行这里的代码  
}

是不是感觉很OK,没有什么问题。

优化方案

推荐写法如下:

SELECT 1 FROM table WHERE a = 1 AND b = 2 LIMIT 1  
  
##### Java写法:  
Integer exist = xxDao.existXxxxByXxx(params);  
if ( exist != NULL ) {  
  //当存在时,执行这里的代码  
} else {  
  //当不存在时,执行这里的代码  
}

SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了业务代码中直接判断是否非空即可。

总结

根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。

往期推荐

1.6w字讲清楚:Sharding-Jdbc 实现读写分离 + 分库分表!

终于给同事讲清楚了,到底什么是重入锁?

List中remove()方法的陷阱,开发谨记!

java性能优化,产品的 QPS 翻倍了

项目经理:Redis缓存都会用,那使用后的效益和成本怎么估算?

用Springboot的时候遇到跨越问题,记得把这篇文章翻出来看解决方案!

你有想过为什么要用注册中心吗?eureka还是nacos?

JWT 还是 OAuth2, 设计一个安全的API接口太难了!

24dcdd590fdfb23f8eef59c8b4e9e946.gif

回复干货】获取精选干货视频教程

回复加群】加入疑难问题攻坚交流群

回复mat】获取内存溢出问题分析详细文档教程

回复赚钱】获取用java写一个能赚钱的微信机器人

回复副业】获取程序员副业攻略一份

193ef5c0d7375c1c2d766f1ab0fa9073.png

好文请点赞+分享

c2f08e41a16b2a9973903ffca87e485e.gif

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值