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,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了 业务代码中直接判断是否非空即可
总结
根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
为DevOps团队新春送福—— JFrog与Docker建立突破性的合作伙伴关系
一、新春送福 值此新春佳节将近之际,JFrog为广大DevOps团队奉上新春福利:我们宣布一项能够为我们的客户和整个DevOps社区带来实质性收益的重大举措,那就是,JFrog与Docker建立开创性的合作伙伴关系,使JFrog DevOps平台的云用户免于Docker Hub的镜像拉取的速度限制。 该协议进一步推动了JFrog充满活力的合作伙伴生态系统。该生态系统建立在“广泛合作从而避免失败”的原则之上,而该原则是JFrog自成立以来的发展基石。我们的首要任务是流水线化、自动化并简化DevOps团队的工作方式,并且追求像这次与Docker-这样的合作伙伴关系,这一直是JFrog的核心价值。 该合作伙伴关系的第一个里程碑是为使用云平台的JFrog Artifactory(我们的通用软件制品管理解决方案)的开发人员提供对Docker Hub和Docker官方镜像的无限制、高性能的访问权限,以简化云原生应用程序的开发。 通过这种合作关系,JFrog和Docker将交付: 使用容器时的最佳、无与伦比的开发人员体验 选择工具集时的自由和灵活性 支持共同客户的专用渠道 企业级的可靠性和性能,以流...
- 下一篇
转发和重定向
Spring MVC 重定向和转发 重定向和转发 重定向经过客户端,而转发没有,因此相对来说转发更快速。但有时采用重定向更方便,如: 重定向到外部网站; 避免用户重新加载页面时再次调用同样的动作。 return "redirect:/view/"+saveUser.getId(); 这里使用重定向来防止当前用户重新加载页面时'''saveUser'''被二次调用。 但是使用重定向无法轻松地给目标页面传值,因此,在Spring3.1后提供了Flash属性,详情见后文。 <br> 常用处理方式 Controller 视图方法间的跳转,无非就是带参跳转和不带参跳转。常用的方法有通过 String 映射 RequestMapping 实现重定向,或者通过 ModelAndView 对象,又或者是 RedirectView 对象,下面逐一说明。 <br> String 重定向 是 return 映射到另一个 Controller 方法的字符串。如果有请求参数,就拼接在 RequestMapping 映射的字符串后面。 // 返回字符串映射的方式 @RequestMappi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- 设置Eclipse缩进为4个空格,增强代码规范
- Docker使用Oracle官方镜像安装(12C,18C,19C)
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合Redis,开启缓存,提高访问速度
- SpringBoot2配置默认Tomcat设置,开启更多高级功能