SQL 查找是否存在,别再 count 了,很耗费时间的!

文章图片
2020年Java面试题库连载中
目前多数人的写法
优化方案
总结
根据某一条件从数据库表中查询『有』与『没有』 , 只有两种状态 , 那为什么在写SQL的时候 , 还要SELECTcount(*)呢?
无论是刚入道的程序员新星 , 还是精湛沙场多年的程序员老白 , 都是一如既往的count
目前多数人的写法
多次REVIEW代码时 , 发现如现现象:
业务代码中 , 需要根据一个或多个条件 , 查询是否存在记录 , 不关心有多少条记录 。 普遍的SQL及代码写法如下
####SQL写法:SELECTcount(*)FROMtableWHEREa=1ANDb=2
####Java写法:intnums=xxDao.countXxxxByXxx(params)if(nums>0){//当存在时 , 执行这里的代码}else{//当不存在时 , 执行这里的代码}
是不是感觉很OK , 没有什么问题
优化方案
推荐写法如下:
####SQL写法:SELECT1FROMtableWHEREa=1ANDb=2LIMIT1
####Java写法:Integerexist=xxDao.existXxxxByXxx(params)if(exist!=NULL){//当存在时 , 执行这里的代码}else{//当不存在时 , 执行这里的代码}
SQL不再使用count , 而是改用LIMIT1 , 让数据库查询时遇到一条就返回 , 不要再继续查找还有多少条了
业务代码中直接判断是否非空即可
总结
根据查询条件查出来的条数越多 , 性能提升的越明显 , 在某些情况下 , 还可以减少联合索引的创建 。
虽短小精干 , 但是收获经验 , 就不要吝啬你的转发和在看 。
之前 , 给大家发过三份Java面试宝典 , 这次新增了一份 , 目前总共是四份面试宝典 , 相信在跳槽前一个月按照面试宝典准备准备 , 基本没大问题 。
《java面试宝典5.0》(初中级)
《350道Java面试题:整理自100+公司》(中高级)
《资深java面试宝典-视频版》(资深)
《Java[BAT]面试必备》(资深)
分别适用于初中级 , 中高级 , 资深级工程师的面试复习 。
【SQL 查找是否存在,别再 count 了,很耗费时间的!】内容包含java基础、javaweb、mysql性能优化、JVM、锁、百万并发、消息队列 , 高性能缓存、反射、Spring全家桶原理、微服务、Zookeeper、数据结构、限流熔断降级等等 。
推荐阅读
- IG能否站稳脚跟?LPL的5局4胜制,让人怀疑世界赛是否还有机会
- 澎湃新闻|券商保险银行领涨,金融股全面爆发:新一轮行情是否已经启动
- 月球|是否可以将整个城市都移居到月球或火星的熔岩隧道?
- 一个社会是否公正,最简单的方法是看老实人是否受欺负
- 乐安县|江西命案逃犯落网:受害者家属希望调查当地公安是否涉嫌渎职
- 数据库|SQLite 3.33.0 发布,世界上使用量最大的数据库引擎
- 德拉季奇:不在意是否打首发 我只想赢球
- 去世后的人,最终会去往哪里呢?是否会进入另一个空间重新开始?
- 17+10却惨遭横扫!湖人13年的屈辱魔兽是否记得?这次换他救赎了
- 你心里最深的牵挂是什么?是否和我一样?
