大家好,今天来为大家解答SQL查找是否“存在”,不再使用count这个问题的一些问题点,包括也一样很多人还不知道,因此呢,今天就来为大家分析分析,现在让我们一起来看看吧!如果解决了您的问题,还望您关注下本站哦,谢谢~
无论你是新晋明星程序员,还是在该领域摸爬滚打多年的资深程序员,COUNT 总是一样的。
目前大多数人的写作方式
多次REVIEW代码时,发现如下现象: 在业务代码中,无论有多少条记录,都需要根据一个或多个条件来查询一条记录是否存在。
常见的SQL及代码编写方法如下:
#####SQL的写法:SELECTcount(*)FROMtableWHEREa=1ANDb=2#####Java的写法:intnums=xxDao.countXxxxByXxx(params);if(nums0){//存在时执行这里的代码} else{ //当不存在时,执行这里的代码} 感觉还可以吧,没问题吧?
优化方案
推荐的写法如下:
#####SQL写法:SELECT1FROMtableWHEREa=1ANDb=2LIMIT1#####Java写法:Integerexist=xxDao.existXxxxByXxx(params);if(exist!=NULL){//存在时执行这里的代码}else {//不存在时执行这里的代码} SQL不再使用COUNT,而是使用LIMIT 1,这样数据库查询遇到一个就返回,不再继续查找还有多少个。
可以直接在业务代码中判断是否非空!
根据查询条件找到的项目越多,性能提升就越明显。在某些情况下,还可以减少联合索引的创建。
总结
COUNT() 有两个截然不同的目的:
它可以统计某一列中的值的数量或行的数量。统计列值时,要求列值非空(NULL不统计)。
如果在COUNT() 的括号中指定列或列表达式,则计数是该表达式具有值的结果数。COUNT()的另一个功能是统计结果集中的行数。当MySQL确认括号内的表达式值不能为空时,实际上是在统计行数。
最简单的事情是当我们使用COUNT(*) 时。在这种情况下,通配符* 不会像我们猜测的那样扩展到所有列。事实上,它会忽略所有列并直接计算所有行。
—— 《高性能MySQL》
无论如何,我们判断它是否存在。只要确定,是和否,不是,否或有多少!是的情况下直接返回,不再继续统计行数!
原创文章,作者:小su,如若转载,请注明出处:https://www.sudun.com/ask/120462.html
用户评论
枫无痕
这篇文章真是太有启发性了!我一直都是用COUNT语句来判断是否存在数据,没想到还有更简洁高效的方法。 感谢分享,我明天就试试看这个新方法!
有9位网友表示赞同!
在哪跌倒こ就在哪躺下
作者说得对啊,有时候 COUNT()确实显得有点累赘,尤其是在简单的查询结果中。这个新的方法看起来简单易懂。不过,还是要根据具体情况选择合适的方法吧。
有8位网友表示赞同!
疲倦了
以前我也就用count这种方式判断存在的,没想到还有更好的办法效率更高了!学习到了
有8位网友表示赞同!
顶个蘑菇闯天下i
这确实是个很实用的技巧!对于像我经常写复杂SQL语句的人来说,这个方法可以很大程度上减少代码冗余,提高代码的可读性。
有17位网友表示赞同!
剑已封鞘
我觉得这种新方法虽然简单,但并不能解决所有问题。如果需要统计某一条件下记录的个数,还是需要使用COUNT()函数吧
有13位网友表示赞同!
颓废i
这篇文章说的好像很厉害的样子,但我其实不太懂这个语法…还是老老实实用 COUNT 吧!
有5位网友表示赞同!
浅嫣婉语
这种方法可以用在查询很多种多样情况吗?感觉有点局限性啊…
有7位网友表示赞同!
冷嘲热讽i
我更喜欢原来的COUNT()函数,这样一看清了结果。这个新方法太抽象了,不好理解
有13位网友表示赞同!
呆檬
这篇文章让我开阔了眼界!原来还可以用这种方法判断是否存在记录,真是没想到呢!我要赶紧试试看!
有6位网友表示赞同!
暮染轻纱
这种方法确实简单明了,我以后遇到类似问题就不用纠结COUNT()了! 太棒了!
有17位网友表示赞同!
夏以乔木
这个做法虽然不错,但是如果复杂查询的话效率会不会变差?
有7位网友表示赞同!
伱德柔情是我的痛。
我在实际项目中也经常会遇到判断记录是否存在的问题,这个新方法确实可以简化代码。以后我会优先考虑这种方法。
有14位网友表示赞同!
〆mè村姑
这篇文章太有实用价值了!分享一下我的经验,在查询存在条件的情况下,可以用 IN 函数来代替exists()语句,效果一样好!
有9位网友表示赞同!
忘故
对于初学者来说,这个方法理解起来可能比较困难吧… 可以多加一些例子说明?
有6位网友表示赞同!
窒息
真是个强悍的技术!我以前还一直想着用复杂的方法解决这个问题呢。 以后就只用这招, 简洁高效!
有17位网友表示赞同!
ゞ香草可樂ゞ草莓布丁
我觉得这种方法的适用范围有限,在有些情况下仍然需要使用 COUNT() 函数来进行更加精准的统计。作者应该多加一些解释和说明才能更全面地说明新方法的使用场景。
有20位网友表示赞同!
志平
这个方法虽然简单,但要注意一些边界条件,例如当表为空时,是否可以有效地判断? 作者应该在文章中补充一些详细的说明
有14位网友表示赞同!
她最好i
这篇文章确实很有意思,让我了解到新的SQL查询技巧。 以后我会尝试用这个方法来简化我的代码! 感谢分享!
有9位网友表示赞同!
看我发功喷飞你
我觉得作者把这个新方法描述得比较浅显,对于一些熟悉SQL的人来说,可能对学习价值不高。需要更深入地讲解使用方法和优势才能引起更多人的共鸣
有8位网友表示赞同!