点击“开发者技术前线”,选择“星标”
在看|星标|留言, 真爱
作者:程序猿囧途
链接:http://suo.im/5T1tGv
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写 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,没有什么问题
保持对 SQL 写法的怀疑态度
优化方案
推荐写法如下:
##### SQL写法:
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,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了
业务代码中直接判断是否非空即可
SQL 查询速度大大提升
总结
根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建
END
最后给读者整理了一份大厂面试真题,需要的可扫码微信加我备注:“大厂面试”获取。
前线推出学习交流群和大厂面试真题,获取和加群一定要备注:
研究/工作方向+地点+学校/公司+昵称(如java+上海+上交+可可)根据格式备注,可更快被通过且邀请进群,领取一份专属学习礼包扫码加我微信进群,内推和技术交流,大佬们零距离
END
开发者技术前线 ,汇集技术前线快讯和关注行业趋势,大厂干货,是开发者经历和成长的优秀指南。
ps:后台回复 “面试“&”资料” 数百面试手册,即可领取程序员大礼包等你
历史推荐
简历写了期望 30K,面试官邪魅一笑:MySQL千万级别大表,你要如何优化?
好文点个在看吧!