SQL 查找是否“存在“,别再 count 了!

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

根据某一条件从数据库表中查询 『有』『没有』 ,只有两种状态,

那为什么在写SQL的时候,还要SELECT count(*) 呢?无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的count


8.png

目前多数人的写法


多次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,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了业务代码中直接判断是否非空即可


9.png


总结


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


2.jpg


如果大家觉得还不错,点赞,收藏,分享,一键三连支持我一下~

目录
相关文章
|
9月前
|
SQL 数据库
SQL查找是否“存在“,别再count了!
SQL查找是否“存在“,别再count了!
|
10月前
|
SQL 数据库 Python
某站点存在SQL注入,直接可进行脱库(实战可参考此方法)
某站点存在SQL注入,直接可进行脱库(实战可参考此方法)
|
27天前
|
SQL
SQL开发问题之当从数据源读取多个字段时优化 COUNT(DISTINCT ...) 的查询的问题如何解决
SQL开发问题之当从数据源读取多个字段时优化 COUNT(DISTINCT ...) 的查询的问题如何解决
|
2月前
|
SQL Oracle 关系型数据库
SQL COUNT() 函数
SQL COUNT() 函数
24 3
|
2月前
|
SQL 关系型数据库 MySQL
MySQL数据库——SQL优化(3/3)-limit 优化、count 优化、update 优化、SQL优化 小结
MySQL数据库——SQL优化(3/3)-limit 优化、count 优化、update 优化、SQL优化 小结
278 0
|
3月前
|
SQL 关系型数据库 数据处理
详解SQL语句中的GROUP BY和聚合函数COUNT、SUM、AVG、MIN和MAX。
详解SQL语句中的GROUP BY和聚合函数COUNT、SUM、AVG、MIN和MAX。
438 0
|
11月前
|
SQL 安全 数据库
用友畅捷CRM存在SQL注入漏洞
用友畅捷CRM存在SQL注入漏洞,攻击者可通过使用工具获取数据库相关敏感信息,拿到服务器控制权限。
166 1
|
11月前
|
SQL
删除SQL表数据时存在约束的解决方法
删除SQL表数据时存在约束的解决方法
174 0
|
SQL Java 数据库
SQL优化实战-0001:SQL查找是否存在,不要再使用count
SQL优化实战-0001:SQL查找是否存在,不要再使用count
119 0
|
SQL Java 关系型数据库
mysql实现不存在就插入,存在就更新,sql直接执行和mybatis实现的坑!
insert into ... on duplicate key update 字段=新值, mybatis执行报错: SQLException: No value specified for parameter 4,你甚至惊奇的发现你只传了3个参数却提示没找到第4个参数......亲身经历什么叫一个bug找一天
372 0