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

MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?

一、快速结论先看结论再看分析方式作用效率一句话总结count(*)统计所有行数⭐⭐⭐⭐最高我是专业的我为统计而生count(1)统计所有行数⭐⭐⭐⭐ 同样高效我是 count(*) 的马甲兄弟count(列名)统计该列非 NULL的行数⭐⭐⭐ 较慢我挑剔我只数非空值结论用count(*)就对了✅二、代码示例亲测三兄弟的差别准备测试数据-- 创建测试表 CREATE TABLE user_test ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT, email VARCHAR(100) ); -- 插入测试数据故意插入一些NULL值 INSERT INTO user_test (name, age, email) VALUES (张三, 25, zhangsanexample.com), (李四, NULL, NULL), (王五, 30, wangwuexample.com), (NULL, 28, unknownexample.com), (赵六, 35, NULL);测试查询-- 查看表中的数据 SELECT * FROM user_test; /* -------------------------------------- | id | name | age | email | -------------------------------------- | 1 | 张三 | 25 | zhangsanexample...| | 2 | 李四 | NULL | NULL | | 3 | 王五 | 30 | wangwuexample.com | | 4 | NULL | 28 | unknownexample.com| | 5 | 赵六 | 35 | NULL | -------------------------------------- */ -- 测试1count(*) 统计所有行数 SELECT count(*) FROM user_test; -- 结果5 ✅ -- 翻译老板我有多少行数据全都要 -- 测试2count(1) 统计所有行数 SELECT count(1) FROM user_test; -- 结果5 ✅ -- 翻译老板你给我个固定值1我数有多少个1 -- 测试3count(列名) 统计非NULL的行数 SELECT count(name) FROM user_test; -- 结果4 ❗NULL的那行没算 SELECT count(age) FROM user_test; -- 结果4 ❗NULL的那行没算 SELECT count(email) FROM user_test; -- 结果3 ❗两个NULL都没算 -- 翻译我只数有身份证的人黑户不算三、深入剖析它们到底有啥不同1.语义区别最重要的区别-- count(*) 是 SQL 标准写法 -- 意思给我这个表有多少行数据 -- 相当于这个会议室有多少个座位 -- count(1) 是 count(*) 的一种写法 -- 意思统计有多少个1 -- 相当于给每个座位发个苹果最后数苹果 -- count(列名) 是统计该列非NULL值的数量 -- 意思这个会议室有多少人带了手机 -- 相当于检查每个座位如果有人带了手机就计数2.性能区别神话与现实传说中的误解count(1) 比 count(*) 快 ❌count(主键) 最快 ❌现实真相MySQL 5.7 及以后版本count(*)和count(1)性能完全相同MySQL 优化器会把它们当作一回事查看执行计划证明EXPLAIN SELECT count(*) FROM user_test; EXPLAIN SELECT count(1) FROM user_test; EXPLAIN SELECT count(id) FROM user_test; -- 你会看到前两个的执行计划完全一样性能排序一般情况count(*)≈count(1)⭐⭐⭐⭐⭐count(主键列)⭐⭐⭐⭐count(非主键有索引列)⭐⭐⭐count(非主键无索引列)⭐⭐为什么count(列名)可能更慢-- 假设 email 列有索引 SELECT count(email) FROM user_test; /* MySQL 需要 1. 读取索引如果该列有索引 2. 检查每个值是否为 NULL 3. 只计数非 NULL 的 如果 email 列没有索引 1. 读取整行数据比 count(*) 读的更多 2. 检查 email 是否为 NULL 3. 只计数非 NULL 的 */3.特殊情况分析-- 情况1所有列都不允许NULL CREATE TABLE user_not_null ( id INT PRIMARY KEY NOT NULL, name VARCHAR(50) NOT NULL ); -- 这时候count(*) count(id) count(name) -- 情况2空表 vs NULL值 CREATE TABLE empty_table (id INT); SELECT count(*) FROM empty_table; -- 结果0 SELECT count(id) FROM empty_table; -- 结果0 INSERT INTO empty_table VALUES (NULL); SELECT count(*) FROM empty_table; -- 结果1 SELECT count(id) FROM empty_table; -- 结果0 ❗四、实际工作中的选择指南场景1统计总行数-- ✅ 正确做法 SELECT count(*) FROM orders; -- ❌ 错误做法 SELECT count(order_id) FROM orders; -- 万一有NULL呢 SELECT count(1) FROM orders; -- 能用但不是标准场景2统计有效数据数量-- 统计有多少用户填写了邮箱 SELECT count(email) FROM users; -- ✅ 这个场景就该用 count(列名) -- 统计已完成订单数量假设 status2 是已完成 SELECT count(*) FROM orders WHERE status 2; -- ✅场景3统计非重复值-- 统计有多少个不同的城市 SELECT count(DISTINCT city) FROM users; -- ✅ count DISTINCT -- 统计有多少个城市排除 NULL SELECT count(DISTINCT city) FROM users; -- DISTINCT 会自动排除 NULL五、性能优化技巧1.大表优化方案-- 方案1使用近似值适用于统计概览 SELECT TABLE_ROWS FROM information_schema.TABLES WHERE TABLE_SCHEMA your_db AND TABLE_NAME big_table; -- 方案2分页总数缓存适用于列表页 -- 第一次查询时缓存总数后面定时更新 -- 方案3使用汇总表 CREATE TABLE stats_daily ( date DATE PRIMARY KEY, user_count INT, order_count INT );2.索引优化-- 为 count(列名) 创建索引 CREATE INDEX idx_email ON users(email); -- 但注意count(*) 不一定需要索引InnoDB有优化六、有趣比喻帮你记忆汉堡店排队比喻-- 有10个人在排队买汉堡 count(*) 队列里有10个人 ✅ count(1) 我给每人发个号码牌数有10个牌 ✅ count(现金) 只有8个人带了现金 ❗ count(会员卡) 只有5个人有会员卡 ❗教室点名比喻-- 教室里有50个座位 count(*) 教室有50个座位 ✅ count(1) 我在每个座位放本书最后数有50本 ✅ count(学生) 今天来了45个学生上课 ❗空座位不算七、总结与最佳实践最终建议统计总行数一律用count(*)这是 SQL 标准写法性能最优MySQL有专门优化语义最明确统计某列非 NULL 数量用count(列名)这是它的本职工作不要用它统计总行数关于count(1)性能与count(*)一样但不够标准像方言建议统一用count(*)性能关键点大表避免频繁 count考虑使用缓存或汇总表为 count(列名) 的列加索引一张图看懂count(*) - 总数 - 最快 - 推荐使用 ↓ count(1) - 总数 - 一样快 - 可用但不标准 ↓ count(主键) - 总数 - 次快 - 主键非NULL时可用 ↓ count(索引列) - 非NULL数 - 较慢 - 有索引时可用 ↓ count(普通列) - 非NULL数 - 最慢 - 谨慎使用

相关文章:

MySQL 中 count(*)、count(1) 和 count(字段名) 有什么区别?

一、快速结论(先看结论再看分析)方式作用效率一句话总结count(*)统计所有行数⭐⭐⭐⭐ 最高我是专业的!我为统计而生count(1)统计所有行数⭐⭐⭐⭐ 同样高效我是 count(*) 的马甲兄弟count(列名)统计该列非 NULL 的行数⭐⭐⭐ 较慢我挑剔&…...

Pixel Aurora Engine 环境配置详解:Anaconda创建独立Python运行环境

Pixel Aurora Engine 环境配置详解:Anaconda创建独立Python运行环境 1. 为什么需要独立Python环境 在开始配置Pixel Aurora Engine的开发环境之前,我们先聊聊为什么需要创建独立的Python运行环境。想象一下,你的电脑就像一个大型工具箱&…...

Ivanti EPMM RCE CVE-2026-1340/1281完整分析

介绍:近日,Ivanti公司披露了Ivanti Endpoint Manager Mobile (EPMM)中存在的代码注入漏洞(CVE-2026-1281和CVE-2026-1340),并确认已存在在野利用。该漏洞源于 Apache HTTPd 调用的 Bash 脚本在处理时间戳比较时,未能有效过滤恶意参数&#xf…...

Python➕PyQt5➕numpy➕pandas实现学生成绩分析系统(可视化)基于 Python + PyQt5 + Matplotlib + Pandas 实现的学生成绩分析系统框架

基于 Python PyQt5 Matplotlib Pandas 实现的学生成绩分析系统框架 Python➕PyQt5➕numpy➕pandas实现学生成绩分析系统(可视化) (源码项目文档详细README) !!代码注释非常详细 !&#xff01…...

Python MCP服务可观测性革命:OpenTelemetry+Prometheus+Grafana三件套零代码接入方案(附完整YAML模板)

第一章:Python MCP服务可观测性革命概述在微服务架构持续演进的今天,Python构建的MCP(Metrics, Context, and Propagation)服务正成为可观测性实践的关键载体。传统日志聚合与单点监控已难以应对跨服务调用链中上下文丢失、指标语…...

Qwen3.5-9B-AWQ-4bit镜像免配置教程:无需conda/pip,7860端口直连使用

Qwen3.5-9B-AWQ-4bit镜像免配置教程:无需conda/pip,7860端口直连使用 1. 开箱即用的视觉理解模型 今天要介绍的是一个能"看懂"图片的AI模型——Qwen3.5-9B-AWQ-4bit。这个模型最厉害的地方在于,它不仅能理解文字,还能…...

创建使用费曼学习技能,让 AI 帮你快速学习新领域知识(实战教程)

看完一篇文章、学习一个知识,当时感觉懂了。过三天,有人问你,你发现说不清楚。又或者准备运用这个知识,尝试解决问题,又觉得似是而非。这不是记忆力的问题,是你从来没有真正理解过它。有个方法专门解决这件…...

AI 时代做自媒体,他从方法论上就赢了绝大部分人

AI 时代做自媒体,他从方法论上就赢了绝大部分人 昨天刷到卡兹克的一篇文章,他分享了自己做内容三年总结的 10 条方法论。 看完之后我的感受是:这哥们从方法论上就赢了。 简单介绍一下卡兹克。他的公众号「数字生命卡兹克」是 AIGC 领域的头部 IP,新榜 AI 行业公众号排名…...

intv_ai_mk11应用场景:金融从业者用其生成监管政策要点摘要、投研报告初稿框架

intv_ai_mk11在金融领域的应用实践:政策摘要与投研报告生成 1. 金融从业者的AI助手需求 金融行业每天需要处理海量的监管政策和市场信息,传统人工处理方式面临三大挑战: 时效性压力:新政策发布后需要快速理解要点信息过载&…...

《常见三维CAD模型表示法》

表示法核心思想 / 定义数据结构 / 关键特点优点缺点CAD中的应用场景常见软件 / 文件格式B-rep (边界表示)通过精确记录物体的边界(顶点、边、面)及其拓扑关系(邻接、归属)来定义实体包含几何信息(点坐标、曲线方程、曲…...

华为eNSP实战:手把手教你用单臂路由打通不同VLAN,附排错命令清单

华为eNSP单臂路由实战:跨VLAN通信配置与深度排错指南 当企业网络规模扩大时,VLAN隔离是保障安全性和广播域控制的必要手段。但实际业务中,不同部门间的数据交互需求常常需要跨越VLAN边界。在华为认证体系HCIA和HCIP的实验环境中,单…...

AListFlutter(手机alist)——跨平台网盘挂载神器,安卓设备轻松管理云端文件

1. 为什么你需要AListFlutter? 作为一个经常需要在不同设备间切换办公的现代人,我深刻理解手机存储空间不足的痛苦。每次想用手机看个电影,都要先删掉几个APP;想拍个视频,又得清理微信缓存。直到发现了AListFlutter这个…...

别再自己造轮子了!用DJI Pilot 2 + 上云API,30分钟搞定无人机数据上云

30分钟极速对接:用DJI Pilot 2与上云API实现无人机数据云端整合 在智慧城市巡检或应急指挥场景中,实时获取无人机航拍画面与飞行数据往往是业务闭环的关键。传统方案需要投入数月时间开发定制化App,而大疆最新推出的上云API方案,让…...

LTE CDRX配置优化与日志解析实战

1. LTE CDRX功能基础与核心参数解析 CDRX(Connected Mode DRX)是LTE网络中终端设备在连接状态下实现节能的关键技术。想象一下你的手机就像个熬夜加班的程序员,如果一直盯着电脑屏幕(持续监听网络信号),电量…...

MinerU智能文档理解服务:专为高密度文本图像设计的轻量级解决方案

MinerU智能文档理解服务:专为高密度文本图像设计的轻量级解决方案 1. 引言:文档处理的智能化革命 在数字化办公时代,我们每天都要面对大量PDF文档、扫描件和图像资料。这些文件往往包含复杂的版面结构:多栏排版、嵌套表格、数学…...

Comsol 热 - 流 - 固 - 损伤耦合模拟分析:THMD 模型实践

Comsol热-流-固-损伤耦合模拟分析,THMD热-流-固-损伤耦合模型,在这个模型里面考虑了温度场、应力场、压力场和损伤场,采用的是Comsol内置的接口建模 整个模型呈正方形,内部开一个圆孔 在圆孔内壁施加高压低温流体,模型…...

Chord视觉定位模型实战案例:自动驾驶道路元素(车道线/交通灯/行人)定位

Chord视觉定位模型实战案例:自动驾驶道路元素(车道线/交通灯/行人)定位 在真实自动驾驶场景中,单纯依赖传统目标检测模型往往面临泛化能力弱、小目标漏检、遮挡鲁棒性差等问题。而Chord——这个基于Qwen2.5-VL的多模态视觉定位服…...

实战分享:如何用星图平台零代码私有化Qwen3-VL:30B,并接入飞书实现智能对话

实战分享:如何用星图平台零代码私有化Qwen3-VL:30B,并接入飞书实现智能对话 1. 项目概述与价值 在当今企业智能化转型的浪潮中,如何快速部署私有化大模型并实现业务场景落地,成为许多技术团队面临的挑战。本文将详细介绍如何通过…...

ESP32-S3双下载方案对比:VSCode一键烧录 vs 乐鑫Flash工具实操

ESP32-S3双下载方案深度评测:VSCode高效开发 vs 乐鑫工具链生产级部署 1. 开发环境配置与工具链解析 对于ESP32-S3开发者而言,选择正确的开发工具直接影响项目效率。当前主流方案可分为两类:基于VSCode的集成化开发环境和乐鑫官方Flash下载工…...

AI开发效率翻倍:TensorFlow-v2.9镜像完整开发环境实测体验

AI开发效率翻倍:TensorFlow-v2.9镜像完整开发环境实测体验 你是不是也经历过这样的场景?新项目启动,满怀激情准备大干一场,结果第一天就卡在了环境配置上。CUDA版本不对、依赖库冲突、Python环境混乱……光是让TensorFlow成功识别…...

Qwen3.5-9B训练复现:从SFT到RLHF的全流程开源实践指南

Qwen3.5-9B训练复现:从SFT到RLHF的全流程开源实践指南 1. 项目概述 Qwen3.5-9B是一个拥有90亿参数的开源大语言模型,具备强大的逻辑推理、代码生成和多轮对话能力。该模型支持多模态理解(图文输入)和长上下文处理(最…...

Net/Net Core微信公众号上传图片永久图片素材和内容中图片素材不能用MultipartFormDataContent的坑

测试了N次,不能用net自带的 MultipartFormDataContent,否则微信公众号会一直报错41005错误,具体原因不详,只能拼装head字符串实现,下面是封装好的上传永久素材和临时图片素材的方法,下面为测试好的代码&…...

AgentCPM-Report轻量化部署:Pixel Epic智识终端GPU显存优化方案

AgentCPM-Report轻量化部署:Pixel Epic智识终端GPU显存优化方案 1. 项目背景与核心价值 Pixel Epic智识终端是一款基于AgentCPM-Report大模型构建的创新研究辅助工具。它将枯燥的科研报告撰写过程转化为一场像素风格的RPG冒险,让用户在游戏化的交互体验…...

忍者像素绘卷开源镜像部署:支持国产昇腾芯片的适配可行性分析

忍者像素绘卷开源镜像部署:支持国产昇腾芯片的适配可行性分析 1. 项目概述与技术特点 忍者像素绘卷是一款基于Z-Image-Turbo深度优化的图像生成工作站,专为二次元风格和复古像素艺术设计。该项目融合了现代AI图像生成技术与16-bit游戏美学,…...

【研报277】国内新能源乘用车市场深度分析报告:2026年市场竞争格局与品牌分化趋势

本报告提供限时下载,请查看文后提示以下仅为报告部分内容:摘要:2026年1-2月国内新能源乘用车市场呈现结构性分化,国产新能源累计销量99.63万辆,同比下滑27.05%,纯电车型跌幅最深,增程式混动相对…...

JwChat避坑指南:Vue聊天组件这些隐藏配置能让体验提升200%

JwChat深度优化实战:解锁Vue聊天组件200%体验升级的隐藏技巧 当你已经用JwChat实现了基础聊天功能,却发现消息列表卡顿、表情包显示错位、历史加载闪烁——这些细节问题正在蚕食用户体验。作为基于Vue的轻量级聊天组件,JwChat的官方文档并未揭…...

Qwen3.5-9B生产环境实践:高并发请求处理+响应延迟优化策略

Qwen3.5-9B生产环境实践:高并发请求处理响应延迟优化策略 1. 项目概述与核心能力 Qwen3.5-9B是一款拥有90亿参数的开源大语言模型,在多个领域展现出卓越的性能。这个模型特别适合需要处理复杂任务的生产环境,因为它具备以下核心能力&#x…...

LingBot-Depth模型优化技巧:处理高分辨率图像的实用方法

LingBot-Depth模型优化技巧:处理高分辨率图像的实用方法 你是不是遇到过这样的情况:拿到一张高分辨率的室内场景照片,兴冲冲地丢给深度估计模型,结果要么显存爆炸,要么生成的效果图边缘模糊、细节丢失,完全…...

从Linux内核页表映射到用户态HugeTLB池:金融级C++内存池的7层硬件协同优化法(仅限TOP20对冲基金内部文档解密版)

第一章:金融高频交易C内存池的硬件协同优化全景图在纳秒级响应要求的金融高频交易系统中,C内存池不再仅是软件抽象层的性能补丁,而是CPU缓存子系统、内存控制器与DRAM物理特性的协同执行面。现代x86-64平台(如Intel Ice Lake-SP或…...

Qwen3-ForcedAligner-0.6B在美赛中的应用:跨语言访谈数据分析

Qwen3-ForcedAligner-0.6B在美赛中的应用:跨语言访谈数据分析 1. 引言 在美国大学生数学建模竞赛(MCM/ICM)中,参赛队伍经常面临一个棘手问题:如何高效处理来自不同国家、不同语言的学术访谈数据?传统方法…...