当前位置: 首页 > news >正文

(一)MySQL常见疑惑之:select count(*)和select count(1)的区别​​​​​​​

一、MySQL中统计查询结果行数的三种方法以及区别

1.1 【统计查询结果行数的方式】

    在MySQL中统计查询结果行数,最常采用的方式有三种:count(*)、count(1)或者count(column)。这三种是最常用的count聚合函数使用方式。很多人其实对这三者之间是区分不清的。本文会从执行的结果,查询的效率,使用的场景等方面来分析三者的区别。

1.2 【先说结论】

  • select COUNT(*) :统计表中所有行的数量,无论列是否为 NULL。
  • select COUNT(*) :统计所有行,这里的 1 是一个常数表达式,表示每一行都会被计数
  • select COUNT(colom) :统计的是该字段值为非空的行数,也即是column如果值是null,则不会被统计。

1.3 【实例论证】

(1) 新建测试表,初始化数据

新建测试表

初始化测试数据

(2) 无null值的统计结果

(3) 有null值情况下统计查询结果

模拟null值插入

整体表数据

统计结果

明显发现:count(colnum)统计的查询结果是不包含null的行

二、三种统计查询结果行数的方法的查询效率

    经常会看到一些所谓的优化建议不使用count(* )而是使用count(1),从而可以提升性能,给出的理由是count( *)会带来全表扫描。实际情况是如何写count**查询效率一样**,它们三个在底层原理上并不会带来效率质的区别。

上述判断的理由是:通过查看sql执行计划,它们的执行计划没有太大差别

特殊情况:在某些极端情况下,可能会有一些微小的差别:
  • 在某些存储引擎中(如 MyISAM),COUNT(*) 可能会直接读取存储的行数统计信息,而 COUNT(1) 也可能会利用同样的优化机制

三、三种统计查询结果行数的方法使用场景

  • COUNT(*) :一般情况下,推荐使用 COUNT(*),因为它的语义更清晰,更容易让其他开发者理解查询的意图。
  • COUNT(1) :在一些旧版本的数据库系统中,可能更倾向于使用 COUNT(1),但如今这种差异已经不明显。如果需要统计行数,但希望保持代码的一致性,可以使用 COUNT(1),尤其是在代码中已经大量使用这种形式的情况下
  • COUNT(CLOUMN): 如果明确想统计数据库某个列的查询结果,并且想排除该列值为空的情况
http://www.dtcms.com/a/105467.html

相关文章:

  • VMware 虚报化Ubuntu 卡成一B,如何接招?
  • vue3相比于vue2的提升
  • JAVA垃圾回收算法和判断垃圾的算法
  • 深入对比分析:Squid 与 Nginx 的异同
  • 【SpringBoot + MyBatis + MySQL + Thymeleaf 的使用】
  • 【数据分享】2020年中国1km精度住宅用地密度栅格数据
  • 机器学习-04-分类算法-03KNN算法案例
  • 腻子刮的遍数越多越好?刮的越厚墙面越平?
  • JAVA- 锁机制介绍 进程锁
  • 力扣百大算法题精选【Hard 模式】Top 100 Liked LeetCode
  • conda安装python 遇到 pip is configured with locations that require TLS/SSL问题本质解决方案
  • 城电科技 | 光伏地砖:零碳城市的 太阳能发电“隐形发电站”
  • Muduo网络库实现 [五] - Poller模块
  • 技术回顾day2
  • Linux 2021韩顺平网课笔记:进程管理
  • 树莓派超全系列文档--(19)树莓派配置网络
  • 音乐缓存管理器的性能优化方法分析
  • 相机的曝光和增益
  • CSS中的overflow属性
  • C#从入门到精通(5)
  • 激活函数学习笔记
  • es 3期 第28节-深入掌握集群组建与集群设置
  • 清理redis缓存
  • 架构师论文《论软件质量保证及其应用》
  • 令牌与签名的区别(IT安全/认证机制)
  • blender场景导入Unity的流程(个人总结)
  • net8.0 使用JWT完成登录验证
  • NVR接入录像回放平台EasyCVR视频系统守护舌尖上的安全,打造“明厨亮灶”云监管平台
  • Playwright与Browser Use:领略AI赋能UI自动化测试的魔法魅力
  • 从入门到精通【MySQL】 联合查询