Mysql:count(1)和count(*)和count(主键字段)有什么区别?
一、三种写法分别是什么意思1.COUNT(*)SELECT COUNT(*) FROM users;表示统计结果集中的行数不管这一行的字段是否为NULL。这是最标准、最清晰的“统计行数”写法。2.COUNT(1)SELECT COUNT(1) FROM users;1是一个永远不为NULL的常量。对于结果集中的每一行MySQL 都可以得到一个非NULL的1所以最终统计的仍然是行数每行 - 计算出 1 - 计数加一因此对 InnoDB 来说COUNT(*) COUNT(1)MySQL 官方明确说明这两种写法处理方式相同没有性能差异。3.COUNT(主键字段)SELECT COUNT(id) FROM users;它统计的是id字段不为NULL的行数。如果id是真正的主键那么主键必然是NOT NULL因此COUNT(*) COUNT(1) COUNT(id)通常得到相同结果。二、举个例子表中有三行idnameremark1张三正常2李四NULL3王五正常执行SELECT COUNT(*) AS c1, COUNT(1) AS c2, COUNT(id) AS c3, COUNT(remark) AS c4 FROM users;结果是c1 3 c2 3 c3 3 c4 2原因COUNT(*)统计所有行COUNT(1)1永不为NULL统计所有行COUNT(id)id是主键全部非NULLCOUNT(remark)忽略remark IS NULL的那一行MySQL 中COUNT(expr)统计的是表达式不为NULL的数量而COUNT(*)统计行数。三、哪个性能最好对 InnoDB 来说通常结论是COUNT(*) COUNT(1)性能基本相同。如果主键字段是id BIGINT PRIMARY KEY那么COUNT(id)结果通常也相同但没有必要为了性能特意使用它。实际开发中推荐SELECT COUNT(*) FROM users;原因是语义最清晰表达的是“统计行数”MySQL 对它有明确的优化路径不会因为字段是否允许NULL而产生误差MySQL 官方说明InnoDB 会按照当前事务可见性统计记录并且对于没有额外WHERE、GROUP BY的COUNT(*)通常会遍历可用的最小二级索引没有二级索引时才扫描聚簇索引。所以实际性能主要取决于是否有合适的WHERE条件是否有合适的索引索引大小数据是否已经在 Buffer Pool 中当前事务可见的数据量表中数据规模而不是取决于*、1还是主键字段。四、一个容易出错的场景LEFT JOIN考虑SELECT u.id, COUNT(*), COUNT(o.id) FROM users u LEFT JOIN orders o ON u.id o.user_id GROUP BY u.id;假设用户张三没有订单。LEFT JOIN仍然会保留张三这一行只是订单表字段全部为NULLu.id o.id 1 NULL因此COUNT(*) 1 COUNT(o.id) 0这里两者含义不同COUNT(*)统计连接结果中的行数COUNT(o.id)统计真正匹配到订单的数量因此统计子表数量时经常应该写COUNT(o.id)而不是COUNT(*)五、MyISAM 的特殊情况如果使用 MyISAM且查询是SELECT COUNT(*) FROM users;没有WHERE条件时MyISAM 可以利用存储的行数信息快速返回结果。但 InnoDB 不保存一个可以直接返回的精确总行数因为不同事务可能看到不同的数据版本。不过现在绝大多数业务表使用 InnoDB所以通常记住 InnoDB 的结论即可。

相关新闻

VisualCppRedist AIO:终极Windows运行库修复工具完全指南

VisualCppRedist AIO:终极Windows运行库修复工具完全指南

VisualCppRedist AIO:终极Windows运行库修复工具完全指南 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾因"找不到MSVCP140.dll"…

2026/8/6 17:30:31 阅读更多 →
2026最新!英语老师都在用的1款听说软件推荐

2026最新!英语老师都在用的1款听说软件推荐

【摘要:】 我深耕英语听说领域教研5年,踩过不少智能工具的坑,今天结合实测数据拆解英语听说训练的核心痛点,分析主流AI工具的技术逻辑,给老师、学生做客观选型参考,无广告全是实操经验。英语听说教学的真实…

2026/8/6 17:30:30 阅读更多 →
基于MiniMax H3模型构建编码生成智能体:从原理到批量应用实践

基于MiniMax H3模型构建编码生成智能体:从原理到批量应用实践

这次我们来看一个基于 MiniMax H3 模型构建的“一次性生成区域编码智能体”项目。这个项目的核心不是教你从零训练模型,而是如何利用现有的强大语言模型,快速搭建一个能理解并生成特定领域编码(如地理编码、产品编码、工作流编码等&#xff0…

2026/8/6 17:29:30 阅读更多 →

最新新闻

3步玩转Reloaded-II:零基础开启你的游戏模组之旅

3步玩转Reloaded-II:零基础开启你的游戏模组之旅

3步玩转Reloaded-II:零基础开启你的游戏模组之旅 【免费下载链接】Reloaded-II Universal .NET Core Powered Modding Framework for any Native Game X86, X64. 项目地址: https://gitcode.com/gh_mirrors/re/Reloaded-II 你是否曾经为心爱的游戏寻找新玩法…

2026/8/6 18:28:56 阅读更多 →
崩坏星穹铁道自动化助手:三月七小助手终极使用教程

崩坏星穹铁道自动化助手:三月七小助手终极使用教程

崩坏星穹铁道自动化助手:三月七小助手终极使用教程 【免费下载链接】March7thAssistant 崩坏:星穹铁道全自动 三月七小助手 项目地址: https://gitcode.com/gh_mirrors/ma/March7thAssistant 还在为《崩坏:星穹铁道》中重复的日常任务…

2026/8/6 18:28:56 阅读更多 →
终极Windows激活指南:5分钟免费激活微软全家桶的完整方案

终极Windows激活指南:5分钟免费激活微软全家桶的完整方案

终极Windows激活指南:5分钟免费激活微软全家桶的完整方案 【免费下载链接】Microsoft-Activation-Scripts Open-source Windows and Office activator featuring HWID, Ohook, TSforge, and Online KMS activation methods, along with advanced troubleshooting. …

2026/8/6 18:28:56 阅读更多 →
设置窗口图标

设置窗口图标

import sys from PyQt5.QtWidgets import QApplication, QWidget, QStyle from PyQt5.QtGui import QIconif __name__ "__main__":# 创建应用对象app QApplication(sys.argv)# 创建主窗口window QWidget()window.setWindowTitle("设置窗口图标示例")win…

2026/8/6 18:28:56 阅读更多 →
告别手速焦虑:大麦自动抢票系统5分钟上手指南

告别手速焦虑:大麦自动抢票系统5分钟上手指南

告别手速焦虑:大麦自动抢票系统5分钟上手指南 【免费下载链接】ticket-purchase 大麦自动抢票,支持人员、城市、日期场次、价格选择 项目地址: https://gitcode.com/GitHub_Trending/ti/ticket-purchase 还在为抢不到热门演唱会门票而烦恼吗&…

2026/8/6 18:28:56 阅读更多 →
OSkhQuant:让量化交易像搭积木一样简单

OSkhQuant:让量化交易像搭积木一样简单

OSkhQuant:让量化交易像搭积木一样简单 【免费下载链接】OSkhQuant 看海量化回测系统(看海量化交易系统)开源代码,khQuant框架,实现A股可视化回测,全部开源。 项目地址: https://gitcode.com/gh_mirrors/…

2026/8/6 18:27:56 阅读更多 →

日新闻

深入解析LimboAI C++内核:架构设计与性能优化实战

深入解析LimboAI C++内核:架构设计与性能优化实战

1. 项目概述:为什么我们需要深入LimboAI的C内核?如果你是一名使用Godot引擎的游戏开发者,尤其是对AI行为逻辑有较高要求的项目,那么LimboAI这个名字你大概率不会陌生。它作为Godot 4生态中一个备受瞩目的行为树与状态机插件&#…

2026/8/6 0:00:06 阅读更多 →
Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

Unity 2D游戏敌人AI系统:基于PlayMaker状态机与2D Toolkit的实战开发

1. 项目概述与核心思路大家好,我是老张,一个在游戏开发一线摸爬滚打了十多年的老码农。今天咱们接着聊《空洞骑士》风格2D动作游戏的Demo制作。上一期我们搭好了基础框架,处理了角色移动和碰撞,这一期,我们要让游戏世界…

2026/8/6 0:00:06 阅读更多 →
被动防火门市场前景发展趋势

被动防火门市场前景发展趋势

被动防火门依靠材质结构、密闭构造阻隔烟火蔓延,无需电控启动,是建筑被动消防系统核心构件,行业依托新规管控、城市更新、工业安全升级迎来稳定扩容,整体朝着合规化、专项化、低碳化、智能化方向发展。现阶段 GB12955‑2024 新版国…

2026/8/6 0:00:06 阅读更多 →

周新闻

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

最大流算法详解:从水管网络到Ford-Fulkerson与Dinic实战

1. 从水管网络到最大流:一个核心问题的诞生想象一下,你是一个城市供水系统的总工程师。你的城市有多个水源(水库),需要通过一个复杂的地下管道网络,将水输送到各个居民区。每条管道都有其最大通水能力&…

2026/8/5 15:00:43 阅读更多 →
基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

基于Springboot的企业门户网站(源码+LW+调试文档+讲解)

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

2026/8/5 13:13:56 阅读更多 →
MATLAB xcorr函数详解:从互相关原理到四大实战应用

MATLAB xcorr函数详解:从互相关原理到四大实战应用

1. 从一次信号“找茬”说起:为什么我们需要互相关几年前,我在处理一组声学传感器数据时遇到了一个棘手的问题。我有两个麦克风记录了一段相同的音频信号,理论上它们接收到的声音波形应该非常相似,只是由于麦克风位置不同&#xff…

2026/8/5 10:20:36 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/5 23:28:39 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/5 21:00:14 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/5 23:46:51 阅读更多 →