count(*)/count(1)/count(主键)统计效率对比

数据库中count(字段) ,count(主键 id) ,count(1)和count(*)的区别 SQL中COUNT函数用法对比:COUNT()统计所有行(含NULL),性能最优,推荐使用;COUNT(1)功能相同但语义不清晰;COUNT(主键)走主键索引,结果通常与COUNT()一致;COUNT(字段)仅统计非NULL值,效率取决于字段索引。现代数据库对COUNT()有专门优化,应作为统计行数的首选,而统计非NULL值时使用COUNT(字段)。避免使用语义模糊的COUNT(1),团队应保持统一的COUNT()写法习惯。 阅读详情

前言

在实际业务开发中,我们常常需要count数据表的记录条数。关于使用mysql的count统计函数,大多开发者都不会有疑问,但是就使用细节上,大家的观点可能就不一致了。一派认为count(1)比count(*)要快,说count(*)要全表扫描而count(1)则不用。另一派反之。针对count(主键)和count(1)和count(*),大家几乎一致认为count(主键)效率较慢。那么实际情况是这样么?

本次就来做个总结。

测试

针对mysql5.7 innodb引擎,主键为id的表,
我们explain count(1)和count(*)以及count(id)和count(name)

explain select SQL_NO_CACHE count(1) from province
explain select SQL_NO_CACHE count(*) from province
explain select SQL_NO_CACHE count(id) from province
explain select SQL_NO_CACHE count(name) from province

然后发现前三者的执行计划一摸一样
1.png
而count(name)显然效率较低
2.png

所以我们确定count(*)和count(1)以及count(主键)的效率是一致的!
mysql底层对count()有优化,会选择最有效率的方式去执行count操作,两者没有性能差异,效率都比较高。

总结

一方面

count(主键列),count(),count(1)效率差不多!
count(非主键列)的效率往往低于count(
),count(1),count(主键列)!

另一方面

count(1),count(*)会统计表中的所有的记录数,包含字段为null 的记录;
count(列名) 会统计该字段在表中出现的次数,不统计字段为null 的记录。

请关注我的订阅号

订阅号.png

GNSS差分码偏差(DCB)从原理到实战:如何避免数据处理中的常见错误 本文深入解析GNSS差分码偏差(DCB)的原理及其对高精度定位的关键影响。针对数据处理中因忽略DCB校正导致的常见错误,如单系统PPP高程偏差、多系统融合精度下降及电离层研究失真等,提供了实战解决方案与主流DCB产品获取、集成方法,帮助用户有效规避陷阱,提升数据处理精度。 阅读详情

相关推荐

主流算力卡性能对比分析

超大规模AI训练/HPC:优先选择NVIDIA H100或AMD MI300X,需关注显存带宽和多卡互联能力。企业级AI训练:NVIDIA A100性价比更高,生态成熟。国内自主可控需求:华为昇腾910B是首选,支持液冷和低功耗设计。本地AI推理/游戏:NVIDIA RTX 4090或RTX 5090性价比突出,但需注意显存容量限制。边缘计算/低功耗场景:华为昇腾310或清微智能TX536(能效比6.3TOPS/W@INT8)更合适。

m0_69867914的博客 7795

【MySQL进阶】count(*) 、count(1)、count(字段)到底有什么区别?哪种性能好?

【MySQL进阶】count(*) 、count(1)、count(字段)到底有什么区别?哪种性能好?

blblccc 639

全球尺度遥感云计算平台:Google Earth Engine

Google Earth Engine(GEE)是一个基于 Google 云服务基础设施的遥感大数据分析平台,它结合 Google 强大的云计算能力与 NASA、ESA、NOAA 等机构的空间数据,用于在全球尺度解决一些非常重要的社会问题:森林退化、粮食安全、灾害预警、水资源管理、气候监测以及环境保护等。 GEE 官方宣传视频(版权归 Google 所有) Spacefan 的视频 ·303播放 发展背景 2008 年,手握 40 多年 LandSat 数据的美国地质调查局(USG...

qq_41240287的博客 5013

count(1)、count(*)、count(字段)哪个更靠谱

count是在数据库查询中常用的函数,经常用于统计记录数和做分页查询,那么count(1),count(*),count(列名)有什么区别,哪种效率更高呢?

weixin_54168675的博客 1344

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3789

K-L展开 (Karhunen-Loeve expansion)

K-L变换

susan_wang1的博客 2万+

1.count(*) ,count(1), count(字段)有什么差别,执行效率有什么区别。

当没有二级索引的时候,InnoDB 循环遍历聚簇索引,将读取到的记录返回给 server 层,然后读取记录中的 id 值,就会 id 值判断是否为 NULL,如果不为 NULL,就将 count 变量加 1。执行 explain 命令效率是很高的,因为它并不会真正的去查询,下图中的 rows 字段值就是 explain 命令对表 t_order 记录的估算值。当有二级索引的时候,会走二级索引,因为二级索引树比聚簇索引树小,这样遍历二级索引树就会减少IO次数,优化器决定走二级索引。

hdfjhbd的博客 446

UE4载具性能调优指南:从参数设置到实战优化

本文详细解析了UE4载具性能调优的关键技巧,从WheeledVehicle类构建到轮子参数、传动系统设置,再到物理属性与操控调校。通过实战案例分享,帮助开发者优化载具的速度、加速度等核心性能,提升游戏体验。特别适合需要精细调校载具物理特性的开发者参考。

weixin_29019241的博客 469

count(1)、count(*)、count(列名)的含义、区别、执行效率

使用count函数,当要统计的数量比较大时,发现count(*)花费的时间比较多,相对来说count(1)花费的时间比较少。1、如果你的数据表没有主键,那么count(1)比count(*)快;如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快。2、如果你的表只有一个字段的话那count(*)就是最快的。3、如果count(1)是聚索引,id,那肯定是count(1)快,但是差的很小的。因为count(*),自动会优化指定到那一个字段。

qq_42720845的博客 6445

华为OD机考2025C卷 - 高矮个子排队(Java & Python& JS & C++ & C)

华为OD机考2025C卷 - 高矮个子排队。提供在线OJ刷题。Java、C++、Python、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 1680

SAP Parallel Accounting(平行分类账业务)配置及操作手册(超详细的说明和测试)

非常详细的介绍了SAP 的平行分类账配置以及测试效果哦

nopicture的博客 4341

转载:count(*)和count(1)的区别

原始链接:https://blog.youkuaiyun.com/weixin_43980049/article/details/89327782 count(*)和count(1)的区别是什么? weixin_439800492019-04-16 10:42:124682收藏10 分类专栏:sql文章标签:count(*)和count(1)的区别 版权 个人总结如下: 一、count(*)和count(1)查询速度 使用count函数,当要统计的数量比较大时,发现count(*)花...

黄道婆的专栏 1804

AI Agent开发第49课-DIFY让AI自动预约排班后发企业微信通知-MongoDb-Redis-企业微信调用

我们的Dify会讲得很透彻,坚持喂饭级教程,从一个基本的AI自动预约客户到自动记录客户的信息再到自动判断下一步如何走全部是AI化的,这是一个真正的AI原生应用,它来自于我的一个大型物业公司用AI自动预约系统中的一部分。我们会使用这个预约流做完整的Dify例子来讲完,因为它太有代表性了。工作流中的控制反转、AI决策下一步怎么走、人为干涉、用户行为判断、外部中间件如Redis,今天我们就要讲到在Dify中调用MongoDB的数据以及企业微信通知来作为预约派单的最后一步了。

打造全国最全的AI Agent开发知识领域的博客 1752

sql优化——count(1)、count(*)与count(列名)的区别

一、从执行效果来看 1.count(1) and count(*): 基本没差别 count(*)包括了所有的列,相当于行数,在统计结果的时候,不会忽略NULL 2. count(1) and count(列名): (1) count(1) 会统计表中的所有的记录数,不会忽略NULL,包含字段为null 的记录。 (2) count(列名) 会统计该列字段在表中出现的次数,会忽略字段...

攻城狮Kevin 3万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

MySQL中count(*)/count(1)/count(字段) 以及 distinct的使用方法和效率研究

1.应用场景 能适合场景地使用更加合适搞高效的sql 2.学习/操作 暂先参见http://kimi.it/156.html 并可查看mysql手册-->索引-->COUNT(DISTINCT) 3.问题 TBD 4.参考 http://kimi.it/156.html 后续补充 ... ...

"代码"的日常搬运 7214

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

count(1),count(*),count(主键) 性能对比及辟谣

前言 前段时间关于统计数量的sql问题和朋友进行了讨论,网上关于这三种查询方式说法不一,主要有以下两种说法。 count(*) = count(主键) > count(1) count(主键) > count(*) > count(1) 今天对这三种方式进行探究。 数据库为mysql 5.7.12,引擎为InnoDB。 建表 CREATE TABLE `user` ...

qq_36403693的博客 2192

select * 和select 1,select count(*)和select count(1)

1、select * 和select 1的区别 如果要返回数据,使用select * ,如果要判断有没有结果使用select 1; 2、select count(*)和select count(1)的区别 一般情况下,select count(*)和select count(1)两个返回的结果是一样的。

m0_63725962的博客 1万+

你还在认为 count(1) 比 count(*) 效率高?

点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!作者:BigoSprite来源:http://rrd.me/ehmFF1. count(1) and co...

程序猿DD 3040

浅谈count(普通列), count(*),count(1),count(index)和count(主键)执行效率

最近一仁兄,问到关于count(普通列), count(*),count(1),count(index)还有count(主键)执行效率,所以,今天抽个空,自己做个实验,测试测试不同的情况,我测试的思路是从执行计划上和运行时间这两方面入手,如有不正确之出,还敬请指出!! 首先确定的是: count(*)包括了所有的列,在统计结果时,不会忽略列值为NULL ; count(1)包括了所有列,用1...

知跬步,至千里 1867

mysql中count(*)、count(1)、count(主键)、count(字段)的区别

count()函数不同参数的区别

SO_zxn的博客 1918

图解Mysql原理:count(*),count(主键id),count(字段),count(1)统计表的行数哪个性能好?

大家好,我是程序蛇玩编程。今天给大家介绍一个经典面试题,让我们谈一谈count(*),count(主键id),count(字段),count(1)在无过滤条件下统计表的行数哪个快?

weixin_62238621的博客 870

count(*),count(1),count(列名)谁的效率更高?

表达式行为效率COUNT(*)统计所有行高(使用最小索引优化)COUNT(1)统计所有行与COUNT(*)相同COUNT(列名)统计列的非 NULL 值高(有索引时) / 低(无索引时)

只讲干货,不扯淡! 959

count(1)、count(*)和count(指定字段)之间的区别

一、count(1)和count(*) 当表的数据量比较大,对表作分析之后,使用count(1)比使用count(*)用时多。 从执行计划看,count(1)和count(*)的效果是一样的。 但是在表做过分析之后,count(1)会比count()的用时少些。 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。 因为count(*),自动会优化指定到那一个字段。所以没必要去count(1),用count(*),sql会帮你完成优化,所以count(1)和count()基本没有

未来不可怕的博客 1万+

面试官:count(*)、count(1)、count(主键)、count(字段) 哪个更快?

如果数据量不大,比如不到百万级别,或者对 count 值精确度要求很高,可以直接使用 count(*) 获取行数。如果数据量非常大,查询频率也很高,可以考虑缓存 count 值;如果考虑使用缓存,但业务又要求 count 值精确,那就把 count 值缓存在数据库中;如果对 count 精确度要求不高,可以考虑把 count 值缓存在 redis;如果要统计某一个字段非空的行数,则使用 count(字段);如果是分库分表的场景,则采用并行统计来提高效率。

zjj2006的专栏 1050

MySQL:count(*),count(1),count(col)效率比较

count(1)效率高于count(*)这个理论以前就直接印在脑子里,之前做了一个百万数据插入MySQL的测试,想着有这么多数据,就粗略地测试一下。 结果:count(img) > count(del_flag) > count(name) > count(id) > count(1)=count(*) > count(status)=count(sta...

zyz_1024的博客 6934

COUNT(1)和COUNT(*) 的区别

两者本质上没有任何区别。 参见MYSQL 参考手册 InnoDBhandlesSELECT COUNT(*)andSELECT COUNT(1)operations in the same way. There is no performance difference. 一、count情况 1、count(1):可以统计表中所有数据,不统计所有的列,...

xintingandzhouyang的专栏 1万+
上一篇: 23.从零开始学springboot-excel导入导出
下一篇: 25.从零开始学springboot-springboot2.1.x报错循环依赖问题
码哥说
博客等级 码龄8年 5645粉丝 172原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

码哥说

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值