SQL判断是否存在,还在用 count 操作?试试这条 SQL 语句,性能杠杠的!
来源 | 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 语句,性能杠杠的!相关推荐
- sql 非主键每年自增_或许你不知道的 10 条 SQL 技巧
上文我们简述了 SQL 的一些进阶技巧,一些朋友觉得不过瘾,我们继续来下篇,再送你 10 个技巧 一. 使用延迟查询优化 limit [offset], [rows] 经常出现类似以下的 SQL 语句 ...
- SQL判断是否“存在“,还在用 count 操作?
根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写SQL的时候,还要select count(*) 呢? 无论是刚入道的程序员新星,还是精湛沙场多年的程序员老白,都是一如既往的 ...
- oracle 相同的sql执行两次 执行计划会不一样吗,一条SQL语句,两次执行计划的差距...
jonas_li 发表于 2013-12-18 15:14 执行计划也可以贴出来,看看,是否真的如此 Execution Plan ---------------------------------- ...
- 求助多条线段围成的图形判断封闭图形还是非封闭图形
求助多条线段围成的图形判断封闭图形还是非封闭图形 已知多条线段,例如4条,已知第一条长度和相对第二条的顺时针角度,第二条长度和相对第三条的顺时针角度,第三条长度和相对第四条的顺时针角度,第四条长度和角 ...
- MyBatis list Contains MyBatis 动态SQL 判断List Contains
MyBatis list Contains MyBatis 动态SQL 判断List Contains 一.情景描述 在使用MyBatis 动态SQL查询时,有时候需要判断集合中是否有某个元素,若存在 ...
- 一条SQL语句在MySQL中是如何执行的
来源:http://t.cn/E6U9Z9T 概览 本篇文章会分析下一个sql语句在mysql中的执行流程,包括sql的查询在mysql内部会怎么流转,sql语句的更新是怎么完成的. 一.mysql架 ...
- 解析MySQL基础架构及一条SQL语句的执行流程和流转
前言 本篇文章分析SQL语句在MySQL中的执行流程,包括SQL的查询在MySQL内部会怎么流转,SQL语句的更新是怎么完成的.在分析之前我们一起看看MySQL的基础架构,知道了 MySQL由那些组件 ...
- 一条sql语句在mysql中如何执行的
文心阁小说本篇文章会分析下一个 sql 语句在 MySQL 中的执行流程,包括 sql 的查询在 MySQL 内部会怎么流转,sql 语句的更新是怎么完成的. 在分析之前我会先带着你看看 MySQL ...
- 一条sql语句添加多个字段
Forbiden: Merge the alter statement for table 'app_info' to ONE. 需要给表中添加两个字段,之前写了两句: alter table app ...
最新文章
- Delta3D———通过游戏管理器组件和消息的扩展创建自定义行为 《转》
- 融云开发漫谈:你是否了解Go语言并发编程的第一要义?
- mongodb配置windows服务启动
- Python入门100题 | 第027题
- openmp并行编程_转载:多线程编程方法3OpenMPI框架
- c语言中stdbool.h的使用
- mysql 基本操作
- 基于HT for Web的Web SCADA工控移动应用
- “服务器发送了一个意外的数据包。received:3,expected:20“问题的解决方法
- 关于表数据同步使用update_time时的注意事项
- 探讨【IGE】的源代码【二】。
- Android自定义控件学习
- 计算机中.dll文件检查,在电脑中查看并打开dll文件类型的具体方法
- 19-备忘录模式Quarkus实现
- 毁灭战士 DOOM 3DO 源代码公开
- Python可视化打包神器,绝了!
- Pandas按行列求和
- 小的以及大的Typhon IDE
- java中的char_java中的char是什么意思?
- C语言家谱管理程序,[C语言]家谱 - 代码贴 - BCCN
热门文章
- 高职扩招计算机应用课程,高职扩招带来的“新生”
- php脚本函数,PHP执行系统命令函数实例讲解
- linux检查文件一致性,3.20 fsck(检查并修复Linux 文件系统)
- poj3686(最小权值完美匹配)
- HDU3970(Dijstra算法)
- 【每日DP】day14、P2016 战略游戏(树形DP模板)难度⭐⭐⭐
- 【数论】数论基础合集
- 1047.删除字符串中的所有相邻重复项
- bind merge r 和join_R语言数据合并
- 解决在Tomcat上手动部署WAR服务器不能自动解压的方法