SQL 查找是否”存在”,别再 count 了,很耗费时间的!

沙海
沙海
沙海
735
文章
2
评论
2021年4月4日03:03:00
评论
3 1025字阅读3分25秒
摘要

速读摘要

速读摘要

业务代码中,需要根据一个或多个条件,查询是否存在记录,不关心有多少条记录。根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。

原文约 822 | 图片 2 | 建议阅读 2 分钟 | 评价反馈

SQL 查找是否"存在",别再 count 了,很耗费时间的!

戳一戳→ 程序员的成长之路

SQL 查找是否”存在”,别再 count 了,很耗费时间的!

程序员的成长之路

互联网/程序员/技术/资料共享 

关注

阅读本文大概需要 2 分钟。

来自:https://zhuanlan.zhihu.com/p/158794137

根据某一条件从数据库表中查询 『有』与『没有』,只有两种状态,那为什么在写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,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了

业务代码中直接判断是否非空即可

总结

根据查询条件查出来的条数越多,性能提升的越明显,在某些情况下,还可以减少联合索引的创建。

<END>

推荐阅读:

柬埔寨开发offer到手,薪资翻倍,去吗?网友:面向阎王编程...

面试必问!JDK 中定时器是如何实现的?

最近面试BAT,整理一份面试资料《Java面试BATJ通关手册》,覆盖了Java核心技术、JVM、Java并发、SSM、微服务、数据库、数据结构等等。

获取方式:点个「在看」,点击上方小卡片,进入公众号后回复「面试题」领取,更多内容陆续奉上。

朕已阅 SQL 查找是否”存在”,别再 count 了,很耗费时间的!

继续阅读
weinxin
资源分享QQ群
本站是一个IT技术分享社区, 会经常分享资源和教程; 分享的时代, 请别再沉默!
沙海
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: