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

、SEATA分布式事务——XA模式讼

MySQL 中的 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. 检查每个值是否为 NULL3. 只计数非 NULL 的如果 email 列没有索引1. 读取整行数据比 count(*) 读的更多2. 检查 email 是否为 NULL3. 只计数非 NULL 的*/3. 特殊情况分析-- 情况1所有列都不允许NULLCREATE 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; -- 结果0SELECT count(id) FROM empty_table; -- 结果0INSERT INTO empty_table VALUES (NULL);SELECT count(*) FROM empty_table; -- 结果1SELECT 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-- 统计有多少个城市排除 NULLSELECT count(DISTINCT city) FROM users; -- DISTINCT 会自动排除 NULL五、性能优化技巧1. 大表优化方案-- 方案1使用近似值适用于统计概览SELECT TABLE_ROWSFROM information_schema.TABLESWHERE 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数 - 最慢 - 谨慎使用记住口诀数总数用星号数非空列名好数字1虽高效不是标准别当宝戏啡匀镭

相关文章:

、SEATA分布式事务——XA模式讼

MySQL 中的 count 三兄弟:效率大比拼! 一、快速结论(先看结论再看分析) 方式 作用 效率 一句话总结 count(*) 统计所有行数 最高 我是专业的!我为统计而生 count(1) 统计所有行数 同样高效 我是 count(*) 的马甲兄弟…...

从零到百:用Python代码解放剪映生产力,告别重复剪辑劳动

从零到百:用Python代码解放剪映生产力,告别重复剪辑劳动 【免费下载链接】JianYingApi Third Party JianYing Api. 第三方剪映Api 项目地址: https://gitcode.com/gh_mirrors/ji/JianYingApi 想象一下这样的场景:你是一家电商公司的视…...

Java 25虚拟线程在微服务网关中的压测实录(QPS提升8.2倍但GC耗时翻倍的真相)

第一章:Java 25虚拟线程在高并发架构下的实践成本控制策略Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,其核心价值在于以极低的内存与调度开销支撑百万级并发任务。然而,在生产环境中规模化落地时&…...

uniApp相机、存储、电话权限申请全攻略:告别频繁弹窗,提升用户体验

uniApp权限管理艺术:优雅实现相机、存储、电话权限的智能授权策略 在移动应用开发中,权限管理一直是开发者与用户之间的微妙博弈。过于频繁的权限请求会引发用户反感,而缺乏透明度的权限获取又可能导致应用商店审核失败。如何在uniApp框架下构…...

ORB SLAM3性能优化:如何用ORBvoc.bin替代txt文件实现秒级加载(附完整代码修改指南)

ORB SLAM3性能优化实战:二进制词袋加载速度提升10倍的工程实践 第一次运行ORB SLAM3时,盯着终端里缓慢滚动的词袋加载进度条,我下意识看了下手表——整整8秒。在机器人实时定位场景中,这种等待简直像永恒。直到发现二进制词袋的加…...

【PHP 8.9 纤维协程实战黄金手册】:20年架构师亲授高并发服务重构的5大避坑法则

第一章:PHP 8.9 纤维协程的底层机制与演进本质PHP 8.9 并非官方发布的正式版本(截至 PHP 官方最新稳定版为 8.3),但本章所探讨的“纤维协程”概念,实为对 PHP 8.1 引入的 Fiber 类、经 8.2/8.3 持续优化后,…...

告别手动整理!用快马AI生成脚本,自动化处理论文参考文献格式

最近在赶毕业论文,最让我头疼的就是参考文献的格式整理。不同期刊要求不同,手动调整费时费力还容易出错。后来发现用Python写个自动化脚本能省不少时间,今天就把我的实现思路分享给大家。 首先明确需求,脚本需要处理的核心问题包括…...

Flutter 性能优化:构建流畅的应用体验

Flutter 性能优化:构建流畅的应用体验掌握 Flutter 性能优化的高级技巧,创建流畅、响应迅速的应用。一、性能优化概述 作为一名追求像素级还原的 UI 匠人,我对 Flutter 性能优化有着深入的研究。性能优化是现代应用开发的重要组成部分&#x…...

CSS 动画高级技巧:创建流畅的用户体验

CSS 动画高级技巧:创建流畅的用户体验掌握 CSS 动画的高级技巧,创建流畅、引人入胜的用户体验。一、动画基础回顾 作为一名追求像素级还原的 UI 匠人,我对 CSS 动画有着深入的研究。CSS 动画是现代前端开发的重要组成部分,它可以为…...

Flutter 响应式设计:构建适配多设备的应用

Flutter 响应式设计:构建适配多设备的应用掌握 Flutter 响应式设计的高级技巧,创建适配不同屏幕尺寸的应用。一、响应式设计概述 作为一名追求像素级还原的 UI 匠人,我对 Flutter 响应式设计有着深入的研究。响应式设计是现代应用开发的重要组…...

分支定界算法实战:从理论到编程实现的关键步骤解析

1. 分支定界算法入门:从买菜砍价到代码实现 想象一下你在菜市场砍价的场景:老板开价100元,你心里有个底线是80元。这时候你会怎么做?通常会先试探性报个低价(比如60元),然后根据老板反应逐步调…...

概率论作业救星:用科学计算器5分钟搞定样本标准差与方差(含S和σ区分指南)

概率论作业救星:科学计算器5分钟速成样本标准差与方差实战指南 深夜赶概率论作业时,你是否也曾在样本标准差(S)和总体标准差(σ)的选项前犹豫不决?面对卡西欧fx-82ES计算器密密麻麻的按键&…...

STC单片机冷启动下载总失败?手把手教你STC8G1K08A的ISP下载正确姿势(附V6.90软件设置)

STC8G1K08A单片机ISP下载全流程避坑指南 最近在调试STC8G1K08A时,发现不少初学者卡在ISP下载这个入门第一步。明明接线正确,软件设置也没问题,但就是反复提示"检测不到单片机"。这其实与STC特有的冷启动机制密切相关。今天我们就来…...

3大维度解锁Greasy Fork:让普通用户变身浏览器定制大师

3大维度解锁Greasy Fork:让普通用户变身浏览器定制大师 【免费下载链接】greasyfork An online repository of user scripts. 项目地址: https://gitcode.com/gh_mirrors/gr/greasyfork 认知破局:重新认识浏览器脚本的真正价值 你是否曾因网页广…...

Singularity与Docker对比分析:为什么HPC更偏爱Singularity的终极指南

Singularity与Docker对比分析:为什么HPC更偏爱Singularity的终极指南 【免费下载链接】singularity Singularity has been renamed to Apptainer as part of us moving the project to the Linux Foundation. This repo has been persisted as a snapshot right bef…...

基于单片机的人脸识别门禁系统(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T5912205M设计简介:本设计是基于单片机的人脸识别门禁系统,主要实现以下功能:1、人脸识别并进行红外测温 2、人脸识别并…...

我用 AI 辅助开发了一系列小工具():文件提取工具丛

从0构建WAV文件:读懂计算机文件的本质 虽然接触计算机有一段时间了,但是我的视野一直局限于一个较小的范围之内,往往只能看到于算法竞赛相关的内容,计算机各种文件在我看来十分复杂,认为构建他们并能达到目的是一件困难…...

硬件散热的智能管家:FanControl全维度调控指南

硬件散热的智能管家:FanControl全维度调控指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/fa/FanCon…...

2024升级版资源捕获工具:猫抓Cat-Catch全解析

2024升级版资源捕获工具:猫抓Cat-Catch全解析 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化时代,网页资源的获取…...

代码之外周刊(第期):当技术让一切趋同,我们还剩什么?渭

1. 前言 本文详细介绍如何使用 kylin v10 iso 文件构建出 docker image,docker 版本为 20.10.7。 2. 构建 yum 离线源 2.1. 挂载 ISO 文件 mount Kylin-Server-V10-GFB-Release-030-ARM64.iso /media 2.2. 添加离线 repo 文件 在/etc/yum.repos.d/下创建kylin-local…...

深度神经网络训练全攻略:从梯度消失到Adam优化器,一篇搞懂所有技巧

训练深度神经网络就像调教一匹烈马——既要选对方向(优化器),又要控制好缰绳(学习率),还得给它戴好马鞍(正则化)。本文将带你系统掌握这些核心技巧,从此告别“训练不收敛…...

大模型之Linux服务器部署大模型菊

一、各自优势和对比 这是检索出来的数据,据说是根据第三方评测与企业数据,三款产品在代码生成质量上各有侧重: 产品 语言优势 场景亮点 核心差异 百度 Comate C核心代码质量第一;Python首生成率达92.3% SQL生成准确率提升35%&…...

避坑指南:云深处X20与Kinova机械臂URDF模型组合时,关节命名与坐标对齐的那些坑

云深处X20与Kinova机械臂URDF模型组合避坑实战指南 当机械狗遇上机械臂,本该是强强联合的完美组合,却在URDF模型整合过程中频频翻车。关节错位、模型飞散、仿真崩溃——这些看似简单的坐标系对齐问题,往往让开发者耗费数日调试。本文将直击云…...

OBS绿幕抠像技术解析:chroma_key_filter.effect源码实现与优化

1. 绿幕抠像技术基础与OBS实现原理 绿幕抠像(Chroma Key)是视频处理领域的经典技术,就像魔术师用的隐身斗篷,它能让特定颜色范围(通常是绿色或蓝色)变得透明。我在实际项目中发现,OBS Studio作为…...

别再搞混了!天线近场和远场到底怎么分?用喇叭天线和对数周期天线实测告诉你

天线近场与远场划分的工程实践指南:从理论误区到实测解决方案 在微波暗室中调试天线时,工程师小王遇到了一个棘手问题:使用同一套测试设备,喇叭天线在18GHz频段的辐射方向图总是出现异常波动,而对数周期天线在2GHz频段…...

电商客服+导购智能体的设计与开发指

这个代码的核心功能是:基于输入词的长度动态选择反义词示例,并调用大模型生成反义词,体现了 “动态少样本提示(Dynamic Few-Shot Prompting)” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts impo…...

游戏安全社区建设终极指南:awesome-game-security 如何推动游戏安全生态发展

游戏安全社区建设终极指南:awesome-game-security 如何推动游戏安全生态发展 【免费下载链接】awesome-game-security awesome game security [Welcome to PR] 项目地址: https://gitcode.com/gh_mirrors/aw/awesome-game-security 在当今数字游戏时代&#…...

避开ArduPilot地面无人平台调试大坑:ACRO模式下的转向速率设置详解

ArduPilot无人平台ACRO模式转向调参实战:从参数解析到竞技级手感优化 第一次在空地上测试ArduPilot无人车时,我满心期待它能像竞技级RC模型那样做出精准的漂移过弯。但现实是——转向要么迟钝得像在泥沼里打转,要么突然变得过于敏感导致车辆原…...

企业文件共享必看:用组策略实现精细化磁盘配额管理(含客户机权限分配技巧)

企业级存储资源管控:基于组策略的磁盘配额深度实践指南 在数字化转型浪潮中,企业数据量呈现指数级增长。某调研机构数据显示,超过78%的中大型企业面临存储资源分配不均的问题——市场部员工抱怨设计素材无处存放,而行政部门50%的…...

一个Ingress搞定前后端分离:实战配置将API请求转发后端,静态页面留给前端

一个Ingress搞定前后端分离:实战配置将API请求转发后端,静态页面留给前端 在前后端分离架构成为主流的今天,如何优雅地部署应用成了开发者必须面对的挑战。想象一下:用户访问你的网站时,浏览器应该加载React或Vue构建的…...