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

SQL 查找是否存在,别再 count 了,很耗费时间的!
文章图片
2020年Java面试题库连载中
目前多数人的写法
优化方案
总结
根据某一条件从数据库表中查询『有』与『没有』 , 只有两种状态 , 那为什么在写SQL的时候 , 还要SELECTcount(*)呢?
无论是刚入道的程序员新星 , 还是精湛沙场多年的程序员老白 , 都是一如既往的count
目前多数人的写法
多次REVIEW代码时 , 发现如现现象:
业务代码中 , 需要根据一个或多个条件 , 查询是否存在记录 , 不关心有多少条记录 。 普遍的SQL及代码写法如下
####SQL写法:SELECTcount(*)FROMtableWHEREa=1ANDb=2
####Java写法:intnums=xxDao.countXxxxByXxx(params)if(nums&gt0){//当存在时 , 执行这里的代码}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、数据结构、限流熔断降级等等 。


    推荐阅读