sqlcount函数转化为数值型(SQL判断是否"存在",还在用 count 操作?很耗时的!)
类别:数据库 浏览量:2044
时间:2021-10-03 01:24:44 sqlcount函数转化为数值型
SQL判断是否"存在",还在用 count 操作?很耗时的!根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写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判断是否"存在"内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
您可能感兴趣
- spark sql常用操作(Spark SQL数据加载和保存实例讲解)
- mysql删除的delete怎么找回(MySQL Delete 删数据后磁盘空间未释放的原因)
- Sql Server判断函数、存储过程等是否存在
- mysql字符串默认长度(MySQL 字符类型大小写敏感)
- mysql的默认数据库例子在哪里(修改MySQL8.0 默认的数据目录快捷操作无配置)
- SQL中哪些情况会引起全表扫描
- sqlserver 高级查询(利用 SQL Server 过滤索引提高查询语句的性能分析)
- mysql8.0使用(MySQL 8.0新特性 — 检查性约束的使用简介)
- mysql mvcc 隔离级别(详解MySQL事务的隔离级别与MVCC)
- SQL Server中SQL语句或者存储过程的最大长度
- sqlsever查看视图数据类型(SQL Sever查询语句大全集锦)
- mysql怎么和sqlyog连接(Mysql桌面工具之SQLyog资源及激活使用方法告别黑白命令行)
- oracle如何用脚本文件创建表空间(MySQL版oracle下scott用户建表语句实例)
- mybatis执行sql源码解析(mybatis调用sqlserver存储过程返回结果集的方法)
- mac的mysql连接问题如何解决(MAC 中mysql密码忘记解决办法)
- sql server删除曾经登录过的登录名
- 一道高中题-求杯子的高度(一道高中题-求杯子的高度)
- 网坛停摆三巨头亏损惨重,费德勒跌幅88 纳达少赚2400万(网坛停摆三巨头亏损惨重)
- Beyond 版本《无人深空》主线任务攻略 阿特拉斯之道(版本无人深空主线任务攻略)
- 全球科技界最有钱大佬TOP 15 你知道几位(全球科技界最有钱大佬TOP)
- 2主力后腰缺阵 泰山队奇兵有望获重用,赛季0出场,迎来中超首秀(泰山队奇兵有望获重用)
- 三分71 生死战爆发 篮网旧将丁威迪今天成奇兵,助队赢球(三分71生死战爆发)
热门推荐
- js运算符使用教程(js中不常见的运算符与操作符总结)
- mysql主从复制延迟解决方案(关于mysql主备切换canal出现的问题解决)
- docker快速打包部署脚本(使用脚本一键打包并上传docker镜像的实现代码)
- dedecms使用教程(织梦dedecms软件频道判断是本站下载链接后再列出镜像的方法)
- php开发微信小程序后台步骤流程(基于PHP实现微信小程序客服消息功能)
- macos安装虚拟机教程(VMware虚拟机安装苹果Mac OS的超详细教程)
- sqlserver2012海量数据查询(SQL Server 2012 多表连接查询功能实例代码)
- mysql生成唯一订单号(MySQL高并发生成唯一订单号的方法实现)
- 宝塔面板怎么设置ftp(新安装宝塔Linux面板FTP无法连接的解决方法)
- 微信小程序开发如何实现自动保存(微信小程序开发实用技巧之数据传递和存储)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9