Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Count(1)与Count(0)?

Count(1)与Count(0)?

提问于 2017-12-15 02:00:46
回答 2关注 0查看 1K

我想知道Count(1)与Count(*),是否有明显的差异

(具体的数据库是SQL Server 2005.)

回答 2

不知雨

发布于 2017-12-15 03:21:21

在SQL Server中,这些语句功能相同。

与流行的观点相反,在oracle他们也是如此。

SYS_GUID() 在Oracle中是相当计算密集的功能。

在我的测试数据库中,t_even是一个包含1,000,000行的表

这个查询:

代码语言:txt
AI代码解释
复制
SELECT  COUNT(SYS_GUID())
代码语言:txt
AI代码解释
复制
FROM    t_even

运行48几秒钟,因为函数需要评估每个SYS_GUID()返回,以确保它不是一个NULL。

但是,这个查询:

代码语言:txt
AI代码解释
复制
SELECT  COUNT(*)
代码语言:txt
AI代码解释
复制
FROM    (
代码语言:txt
AI代码解释
复制
        SELECT  SYS_GUID()
代码语言:txt
AI代码解释
复制
        FROM    t_even
代码语言:txt
AI代码解释
复制
        )

运行了2几秒钟,因为它甚至不试图评估SYS_GUID()(尽管*是比较受到争议的)

嗨喽你好

发布于 2017-12-15 03:19:53

没有区别。

原因:

网上书籍说“ COUNT ( { [ [ ALL | DISTINCT ] expression ] | * } )”

“1”是一个非空的表达式,所以它是一样的COUNT(*)。优化器认识到它是什么:微不足道的。

一样EXISTS (SELECT * ...或EXISTS (SELECT 1 ...

例:

代码语言:txt
AI代码解释
复制
SELECT COUNT(1) FROM dbo.tab800krows
代码语言:txt
AI代码解释
复制
SELECT COUNT(1),FKID FROM dbo.tab800krows GROUP BY FKID
代码语言:txt
复制
代码语言:txt
AI代码解释
复制
SELECT COUNT(*) FROM dbo.tab800krows
代码语言:txt
AI代码解释
复制
SELECT COUNT(*),FKID FROM dbo.tab800krows GROUP BY FKID

案件:

a)如果指定了COUNT(*),那么结果是T的基数。

也就是说,ANSI标准认为这是你的意思。由于这个迷信,COUNT(1)已经被RDBMS供应商优化了。否则,将根据ANSI进行评估

b)否则,令TX为单列表格,这是将<值表达式>应用于T的每一行并消除空值的结果。如果一个或多个空值被消除,则提出完成条件:警告 -

和开发者交流更多问题细节吧,去 写回答
相关文章
count(1)、count(*) 与 count(列名) 的执行区别
当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!
范蠡
2019/10/19
1.6K0
count(1)、count(*) 与 count (列名) 的执行区别
当表的数据量大些时,对表作分析之后,使用count(1)还要比使用count(*)用时多了!
程序员小强
2019/10/23
3.2K0
count(*) count(id) count(1) count(字段)
count(id)   InnoDB引擎会遍历整张表,把每一行行的id值全部取出来,返回给server层,server层拿到id后,判断是不可能为空的,就按行累加。 count(1)   InnoDB引擎遍历整张表,但不取值,server层对于返回的每一行,放一个数字 1 进去,判断是不可能为空的,累计增加。 count(字段)   1.如果这个字段是定义为not null的话,一行行地从记录里面读出这个字段,判断不能为null,按行累加   2.如果这个字段定义允许为null的话,判断到有可能是null,还要把值取出来在判断一下,不是null才累加。 count(*)   不会把全部的字段取出来,而是做专门的优化,不取值,count(*)肯定不是null,按行累加。
Arebirth
2020/06/19
1.6K0
count(*) count(1)与count(col)的区别
count(*) 和count(1) 都是统计行数,而count(col) 是统计col列非null的行数
week
2019/06/11
4.5K0
Select count(*)、Count(1)、Count(0)的区别和执行效率比较
结论 https://www.cnblogs.com/sueris/p/6650301.html 这里把上面实验的结果总结一下:
用户1212940
2022/04/13
1.4K0
sql中count(1) count(*)与count(列名)的区别
count(1) count(*) 两者的主要区别是 count(1) 会统计表中的所有的记录数,包含字段为null 的记录。 count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。 count(*) 和 count(1)和count(列名)区别 count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略列值为NULL count(1)包括了忽略所有列,用1代表代码行,在统计结果的时候,不会忽略列值为NULL count(列名)只包括列名那
shengjk1
2022/09/21
1.6K0
案例解析:count(1)、count(*) 与 count(列名) 的执行区别
很多人认为count(1)执行的效率会比count()高,原因是count()会存在全表扫描,而count(1)可以针对一个字段进行查询。其实不然,count(1)和count(*)都会对全表进行扫描,统计所有记录的条数,包括那些为null的记录,因此,它们的效率可以说是相差无几。而count(字段)则与前两者不同,它会统计该字段不为null的记录条数。
搜云库技术团队
2019/12/11
1.7K0
MYSQL 下 count(*)、count(列)、 count(1) 理解
cout(*)和count(1) 没区别,但是cout(列名) 不统计为 null 的
王小明_HIT
2019/08/29
2.6K0
MySQL count()函数及其优化count(1),count(*),count(字段)区别
很简单,就是为了统计记录数 由SELECT返回 为了理解这个函数,让我们祭出 employee_tbl 表 所有记录 统计行的总数 计算 Zara 的记录数 注意:由于 SQL 查询对大小写不敏感,
JavaEdge
2018/05/16
3.1K0
执行COUNT(1)、COUNT(*) 与 COUNT(列名) 到底有什么区别?
来源:blog.csdn.net/iFuMI/article/details/77920767
好好学java
2020/07/01
7420
性能大PK count(*)、count(1)和count(列)
印象中网上有些“XX 面试官”系列的网文也有过类似问题的讨论,那 MySQL 统计数据总数 count(*) 、count(1)和count(列名) 哪个性能更优呢?今天我们就来聊一聊这个问题。
架构精进之路
2022/09/27
1.6K1
性能大PK count(*)、count(1)和count(列)
MySQL的count(*)、count(1)和count(列名)区别
count(1)、count() 都是检索表中所有记录行的数目,不论其是否包含null值。 count(1)比count()效率高。
JavaEdge
2022/11/30
3.6K0
MySQL的count(*)、count(1)和count(列名)区别
MYSQL Count(*)和Count(1)区别
在SQL Server中Count(*)或者Count(1)或者Count([列])或许是最常用的聚合函数。很多人其实对这三者之间是区分不清的。本文会阐述这三者的作用,关系以及背后的原理。     往常我经常会看到一些所谓的优化建议不使用Count(* )而是使用Count(1),从而可以提升性能,给出的理由是Count( *)会带来全表扫描。而实际上如何写Count并没有区别。      Count(1)和Count(*)实际上的意思是,评估Count()中的表达式是否为NULL,如果为NUL
用户1220053
2018/02/09
1.6K0
MySQL中count(字段) ,count(主键 id) ,count(1)和count(*)的区别
首先要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。
码农编程进阶笔记
2021/07/20
2.6K0
MySQL中count(字段) ,count(主键 id) ,count(1)和count(*)的区别
首先要弄清楚 count() 的语义。count() 是一个聚合函数,对于返回的结果集,一行行地判断,如果 count 函数的参数不是 NULL,累计值就加 1,否则不加。最后返回累计值。
全栈程序员站长
2022/07/12
2.4K0
【数据库】count(*),count(1)和count(列)
最近写了一些SQL,在用count进行统计的时候,我一般都习惯用count(*),看同事的代码有事会用count(1),那么count(*),count(1)和count(某一列)有什么区别呢?
全栈程序员站长
2022/08/10
8080
[MySQL]sql语句count操作效率排序count(*) count(1) count(主键id) count(字段)
结论: count(*)>count(1)>count(主键id)>count(字段)
唯一Chat
2020/08/21
1.1K0
MySQL中count(*)、count(主键id)、count(字段)和count(1)那种效率更高?
在 MySQL 中,COUNT 函数是一个非常常用的聚合函数,它用于计算某列或某表达式在查询结果中出现的次数。但是,在实际使用过程中,我们可能会遇到不同的 COUNT 函数写法,比如 COUNT(*)、COUNT(主键id)、COUNT(字段) 和 COUNT(1),这些写法在效率上有何差别呢?本文将详细探讨这个问题。
网络技术联盟站
2023/06/08
1.5K0
MySQL中count(*)、count(主键id)、count(字段)和count(1)那种效率更高?
在select count(?) from t这样的查询语句里面,count(*)、count(主键id)、count(字段)和count(1)等不同用法的性能,有哪些差别。 需要注意的是,下面的讨论
码农编程进阶笔记
2021/07/20
4.9K0
MySQL中count(*)、count(主键id)、count(字段)和count(1)那种效率更高?
高性能MySQL——Count(1) OR Count(*)?(转)
如果问一个程序员MySQL中SELECT COUNT(1)和SELECT COUNT(*)有什么区别,会有很多人给出这样的答案“SELECT COUNT(*)”最终会转化成“SELECT COUNT(1),而SELECT COUNT(1)省略了转换的这一步,所以SELECT COUNT(1)效率更高“,甚至有一些面试官也会给出类似的答案。最近在看一些历史遗留代码,绝大多数统计数量的SQL都在用SELECT COUNT(1),觉得有必要搞清楚这个问题。
wuweixiang
2019/03/12
3.2K0
高性能MySQL——Count(1) OR Count(*)?(转)

相似问题

.Any()和 .Count()> 0哪个方法执行得更好?

21.4K

avchatroom-over-limit-count怎么解决?

1493

sql优化 ,百万联表后查 count(*)时间过长?

0131

拉去短信回执的时候,报错 JSONObject["count"] not found?

0249

2022-01-08:数组中只有0和1,每过1代,0旁边只有1个1,当前0会变成1。每过1代,0旁?

082
相关问答用户
腾讯云TDP | TDP会员擅长3个领域
平安资管 | 架构师擅长4个领域
擅长3个领域
擅长5个领域
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档