根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写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写法:

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判断是否“存在“,还在用 count 操作?相关推荐

  1. SQL判断是否存在,还在用 count 操作?试试这条 SQL 语句,性能杠杠的!

    来源 | https://urlify.cn/JjYBJn 根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要select count(*)呢? 无论是刚入道 ...

  2. oracle如何判断数字中有字母,SQL 判断含有字母和数字的字符串

    SQL 判断含有字母和数字的字符串,你想从一个表里筛选出部分行数据,筛选条件是你感兴趣的那个列只包含字母和数字字符,考虑下面的视图 V(SQL Server 用户需要把字符串连接操作符||替换为 +) ...

  3. sql利用在一条语句中count出不同的条件的值

    过多繁琐的sql影响代码质量,及维护成本,以下为两种小技巧处理方式,仅供参考,第二种更美观点 第一种,用case ---when---方法 select id ,sum(case when type  ...

  4. oracle判断非空并拼接,oracle sql 判断字段非空,数据不重复,插入多跳数据

     oracle sql 判断字段非空,数据不重复 select distinct(mobile) from wx_user_mobile where active_time is not null ...

  5. sql判断数据库类型数据_SQL数据类型

    sql判断数据库类型数据 SQL | 资料类型 (SQL | Data Types) Just like other programming languages, facilities of defi ...

  6. sql判断基数_SQL Server中的基数估计框架版本控制

    sql判断基数 This is a small post about how you may control the cardinality estimator version and determi ...

  7. SQL判断某列中是否包含中文字符、英文字符、纯数字,数据截取

    SQL判断某列中是否包含中文字符.英文字符.纯数字 一.包含中文字符 select * from 表名 where 列名 like '%[吖-座]%' [吖-座]是中文字符集第一个到最后一个的范围,虽 ...

  8. SQL 判断字段是否为中文、字母、数字

    SQL 判断字段是否为中文.字母.数字 ascii ( col ) 数字:48 - 57 字母:65 - 123 汉字:123+ 如:判断中文 select * from dws_new_role w ...

  9. 求助多条线段围成的图形判断封闭图形还是非封闭图形

    求助多条线段围成的图形判断封闭图形还是非封闭图形 已知多条线段,例如4条,已知第一条长度和相对第二条的顺时针角度,第二条长度和相对第三条的顺时针角度,第三条长度和相对第四条的顺时针角度,第四条长度和角 ...

最新文章

  1. 皮一皮:当有人在我身边时...
  2. 【Java规划】DOM XML Parser分解、遍历、创XML
  3. tcpip c语言程序设计,TCP 服务端和客户端程序设计(C)
  4. 打造更好用的 EF 自动审计
  5. (转)公钥,私钥和数字签名这样最好理解
  6. (四)Qt实现自定义模型基于QAbstractTableModel
  7. vue computed使用_前端发展方向指南—Vue运行机制
  8. 从零玩转Webpack4~5+实现原理笔记(二)
  9. no module named ‘cv2’解决办法
  10. 老大:用脚本实现Nginx日志每天切分的功能?我:脱了裤子放屁!
  11. Array对象的三种属性实例
  12. 19n20c的参数_供应IC芯片 745653-3 329056 品牌、价格、PDF参数 - 电子产品资料
  13. 项目面试题2:es与solr的区别
  14. python如何循环sql语句_sql语句的for循环语句怎么写
  15. 加速度传感器检测物体倾角的原理
  16. 枚举,联合,宏定义,结构体
  17. windows客户端通过脚本文件添加信任站点
  18. 我的sulley安装过程
  19. 用星号输出一个梯形,如下图所示:(使用嵌套for循环完成)
  20. 银河移民PHP面试,移民香港,我真的“后悔死了”

热门文章

  1. python matplotlib.pyplot.scatter() 中的cmap参数是什么意思?
  2. Python学习笔记(基础知识点二)开更了~
  3. 初学__Python——Python 可重用结构:Python模块
  4. 嵌入式linux完整top命令,linux的top命令详解
  5. 信阳哪些技校有学计算机的,2018年信阳十大技校排名 排名前十的学校有哪些
  6. java序列化算法透析_Java序列化机制与原理的深入分析
  7. php请编写一个函数来将一个_为什么开发人员讨厌PHP
  8. nested exception is java.lang.ClassNotFoundException: Interceptor
  9. mavne的依赖、继承、聚合
  10. MySQL5.7 Linux安装流程