我的编程空间,编程开发者的网络收藏夹
学习永远不晚

count(1)比count(*)效率高吗

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

count(1)比count(*)效率高吗

这篇文章主要介绍了count(1)比count(*)效率高吗的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇count(1)比count(*)效率高吗文章都会有所收获,下面我们一起来看看吧。

MySQL count(1) 真的比 count(*) 快么?  反正同事们都是这么说的,我也姑且觉得对吧,那么没有自己研究一下究竟?如果我告诉你他们一样,你信么?

有 Where 条件的 count,会根据扫码结果count 一下所有的行数,其性能更依赖于你的 Where 条件,所以文章我们仅针对没有 Where  的情况进行说明。

MyISAM 引擎会把一个表的总行数记录了下来,所以在执行 count(*) 的时候会直接返回数量,执行效率很高。在 MySQL 5.5  以后默认引擎切换为 InnoDB,InnoDB  因为增加了版本控制(MVCC)的原因,同时有多个事务访问数据并且有更新操作的时候,每个事务需要维护自己的可见性,那么每个事务查询到的行数也是不同的,所以不能缓存具体的行数,他每次都需要  count 一下所有的行数。那么 count(1) 和 count(*)有区别么?

InnoDB handles SELECT COUNT(*) and SELECT COUNT(1) operations in the same  way. There is no performance difference.  这是官网的解释,直接点击阅读原文查看官文,所以两种实现其实一样,那么具体为什么一样呢?

探究这个问题首先我们需要理解 count 的含义,如下是官网给出的定义:

Returns a count of the number of non-NULL values of expr in the rows  retrieved by a SELECT statement. The result is a BIGINT value.

大致的解释是返回 SELECT 语句检索的行中 expr 的非 NULL 值的计数,到这里我们就明白了,首先它是一个聚合函数,然后对 SELECT  的结果集进行计数,但是需要参数不为 NULL。那么我们继续阅读官网的内容:

COUNT(*) is somewhat different in that it returns a count of the number of  rows retrieved, whether or not they contain NULL values.

大致的内容是说,count(*) 不同,他不关心这个返回值是否为空都会计算他的count,因为 count(1) 中的 1 是恒真表达式,那么  count(*) 还是 count(1) 都是对所有的结果集进行 count,所以他们本质上没有什么区别。

当然这个地方 InnoDB 本身也做了一些优化,它会使用最小的二级索引来进行 count 的查询优化。如果没有二级索引才会选择聚簇索引,这样的设计单从  IO 的角度就节省了很多开销。

到这里我们明白了 count(*) 和 count(1) 本质上面其实是一样的,那么 count(column) 又是怎么回事呢?

count(column) 也是会遍历整张表,但是不同的是它会拿到 column  的值以后判断是否为空,然后再进行累加,那么如果针对主键需要解析内容,如果是二级所以需要再次根据主键获取内容,又是一次 IO 操作,所以  count(column) 的性能肯定不如前两者喽,如果按照效率比较的话:

count(*)=count(1)>count(primary key)>count(column)

既然 count(*) 在查询上依赖于所有的数据集,是不是我们在设计上也需要尽量的规避全量 count 呢?通常情况我们针对可预见的 count  查询会做适当的缓存,可以是 Redis,也可以是独立的 MySQL count 表,当然无论是哪种方式我们都需要考虑一致性的问题。

关于“count(1)比count(*)效率高吗”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“count(1)比count(*)效率高吗”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注亿速云行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

count(1)比count(*)效率高吗

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

面试官:MySQL中Count(*)和Count(1)哪个效率高?

记得有次面试时,面试官也问我类似这样的问题,mysql统计数据总数count(*)和count(1)哪个效率高?今天来聊一聊count(1)和count(*)效率问题。

MySQL中的count(*)与count(1)哪个效率快

这篇文章主要介绍了MySQL中的count(*)与count(1)哪个效率快,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。先说结论:这两个性能差别不大。1.实践我准备了一张有
2023-06-29

纳尼?MySQL 中 count(*) 比 count(1) 快?

InnoDB 需要将每一行数据拿出来,判断该行数据对当前会话是否可见,如果可见,就统计该行数据,否则不予统计。

高效查询:COUNT与EXISTS的比较

COUNT和EXISTS是两个在查询中常用的关键字,用于统计数据行数或判断是否存在符合条件的数据。它们在查询效率上有一些不同:COUNT:COUNT是一个聚合函数,用于统计符合条件的数据行数。当使用COUNT时,数据库会对整个结果集进行扫描
高效查询:COUNT与EXISTS的比较
2024-08-11

高效统计:COUNT与GROUP BY结合

COUNT和GROUP BY是SQL中常用的两个关键字,它们通常结合在一起用于统计数据。COUNT用于计算某个列的行数,而GROUP BY用于按照某个列对数据进行分组。当COUNT和GROUP BY结合在一起使用时,可以实现对分组数据的行
高效统计:COUNT与GROUP BY结合
2024-08-10

如何高效使用SQL COUNT统计

要高效使用SQL COUNT 统计,可以参考以下几点:使用索引:确保要统计的列上有索引,可以加快 COUNT 的执行速度。使用 WHERE 子句过滤数据:在 COUNT 中使用 WHERE 子句可以减少要统计的数据量,提高效率。使用 GRO
如何高效使用SQL COUNT统计
2024-08-10

高效统计用户行为:COUNT与事件追踪

在统计用户行为时,通常会使用两种方法来进行高效的数据收集,即使用COUNT和事件追踪。COUNT是一种简单直接的方法,通过对用户行为进行计数来统计数据。这种方法适用于一些简单的统计需求,比如统计用户的访问量、点击次数等。COUNT方法可以
高效统计用户行为:COUNT与事件追踪
2024-08-11

SQL查“存在”不靠COUNT,揭秘高效检索法

SQL不再使用count,而是改用LIMIT 1,让数据库查询时遇到一条就返回,不要再继续查找还有多少条了,业务代码中直接判断是否非空即可。

HBase的存储效率比MySQL高多少

HBase和MySQL是两种不同类型的数据库,它们在存储效率上的比较并非直接对应,因为它们的设计目标和适用场景不同。HBase是一个分布式、面向列的NoSQL数据库,而MySQL是一个关系型数据库。以下是它们在存储效率方面的具体比较:HB
HBase的存储效率比MySQL高多少
2024-10-19

mybatis 查询方式与效率高低对比

这篇文章主要介绍了mybatis 查询方式与效率高低对比,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-03-15

编程开发中多线程一定比单线程执行效率高吗

这篇文章主要讲解了“编程开发中多线程一定比单线程执行效率高吗”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“编程开发中多线程一定比单线程执行效率高吗”吧! 一、什么是串行?什么是并行?串行:任
2023-06-16

GPT-4终结人工标注!AI标注比人类标注效率高100倍,成本仅1/7

这个开源工具,居然能用GPT-4代替人类去标注数据,效率比人类高了100倍,但成本只有1/7
AI工具2024-11-30

【揭秘】为什么switch...case比if...else执行效率高

在C语言中,条件判断语句是程序的重要组成部分,也是系统业务逻辑的控制手段,教科书告诉我们switch...case...语句比if...else if...else执行效率要高。本文尝试从汇编的角度予以分析并揭晓其中的奥秘。

PyCharm比较高效率的使用技巧有哪些呢

本篇文章为大家展示了PyCharm比较高效率的使用技巧有哪些呢,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。文件差异,轻松比对程序开发必备神器中,beyond compare 绝对可以排一号。虽说好
2023-06-02

MySQL表操作:提高数据处理效率的秘诀(进阶)(1)

💕**“生命不在于相信奇迹,而在于创造奇迹。”——朱学恒**💕 🐼作者:不能再留遗憾了🐼 🎆专栏:MySQL学习🎆 🚗本文章
2023-08-17

编程热搜

目录