来源 | https://urlify.cn/JjYBJn

根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写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 操作?试试这条 SQL 语句,性能杠杠的!相关推荐

  1. sql 非主键每年自增_或许你不知道的 10 条 SQL 技巧

    上文我们简述了 SQL 的一些进阶技巧,一些朋友觉得不过瘾,我们继续来下篇,再送你 10 个技巧 一. 使用延迟查询优化 limit [offset], [rows] 经常出现类似以下的 SQL 语句 ...

  2. SQL判断是否“存在“,还在用 count 操作?

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

  3. oracle 相同的sql执行两次 执行计划会不一样吗,一条SQL语句,两次执行计划的差距...

    jonas_li 发表于 2013-12-18 15:14 执行计划也可以贴出来,看看,是否真的如此 Execution Plan ---------------------------------- ...

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

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

  5. MyBatis list Contains MyBatis 动态SQL 判断List Contains

    MyBatis list Contains MyBatis 动态SQL 判断List Contains 一.情景描述 在使用MyBatis 动态SQL查询时,有时候需要判断集合中是否有某个元素,若存在 ...

  6. 一条SQL语句在MySQL中是如何执行的

    来源:http://t.cn/E6U9Z9T 概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架 ...

  7. 解析MySQL基础架构及一条SQL语句的执行流程和流转

    前言 本篇文章分析SQL语句在MySQL中的执行流程,包括SQL的查询在MySQL内部会怎么流转,SQL语句的更新是怎么完成的.在分析之前我们一起看看MySQL的基础架构,知道了 MySQL由那些组件 ...

  8. 一条sql语句在mysql中如何执行的

    文心阁小说本篇文章会分析下一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL ...

  9. 一条sql语句添加多个字段

    Forbiden: Merge the alter statement for table 'app_info' to ONE. 需要给表中添加两个字段,之前写了两句: alter table app ...

最新文章

  1. Delta3D———通过游戏管理器组件和消息的扩展创建自定义行为 《转》
  2. 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
  3. mongodb配置windows服务启动
  4. Python入门100题 | 第027题
  5. openmp并行编程_转载:多线程编程方法3OpenMPI框架
  6. c语言中stdbool.h的使用
  7. mysql 基本操作
  8. 基于HT for Web的Web SCADA工控移动应用
  9. “服务器发送了一个意外的数据包。received:3,expected:20“问题的解决方法
  10. 关于表数据同步使用update_time时的注意事项
  11. 探讨【IGE】的源代码【二】。
  12. Android自定义控件学习
  13. 计算机中.dll文件检查,在电脑中查看并打开dll文件类型的具体方法
  14. 19-备忘录模式Quarkus实现
  15. 毁灭战士 DOOM 3DO 源代码公开
  16. Python可视化打包神器,绝了!
  17. Pandas按行列求和
  18. 小的以及大的Typhon IDE
  19. java中的char_java中的char是什么意思?
  20. C语言家谱管理程序,[C语言]家谱 - 代码贴 - BCCN

热门文章

  1. 高职扩招计算机应用课程,高职扩招带来的“新生”
  2. php脚本函数,PHP执行系统命令函数实例讲解
  3. linux检查文件一致性,3.20 fsck(检查并修复Linux 文件系统)
  4. poj3686(最小权值完美匹配)
  5. HDU3970(Dijstra算法)
  6. 【每日DP】day14、P2016 战略游戏(树形DP模板)难度⭐⭐⭐
  7. 【数论】数论基础合集
  8. 1047.删除字符串中的所有相邻重复项
  9. bind merge r 和join_R语言数据合并
  10. 解决在Tomcat上手动部署WAR服务器不能自动解压的方法