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

PDE (Processing D Editor) 三维场景编辑器 · 软件白皮书 · 基于 v..汲

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虽高效不是标准别当宝优某屯美

相关文章:

PDE (Processing D Editor) 三维场景编辑器 · 软件白皮书 · 基于 v..汲

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

MindSpore 环境配置完全指南呕

前面我们对 Kafka 的整体架构和一些关键的概念有了一个基本的认知,本文主要介绍 Kafka 的一些配置参数。掌握这些参数的作用对我们的运维和调优工作还是非常有帮助的。 写在前面 Kafka 作为一个成熟的事件流平台,有非常多的配置参数。详细的参数列表可以…...

Java虚拟线程在亿级订单系统中的生死切换(高并发架构避坑指南·仅限内部团队流出版)

第一章:Java 25虚拟线程在亿级订单系统中的定位与生死边界在单机承载日均超两亿订单的高并发场景下,传统平台线程模型(每请求一 OS 线程)已触及内核调度、内存开销与上下文切换的物理极限。Java 25 将虚拟线程(Virtual…...

Kaggle竞赛风向标:如何用地震数据集(如尼泊尔建筑数据)构建你的第一个灾害预测模型?

Kaggle竞赛实战:从地震数据到建筑损毁预测的完整机器学习流程 去年在尼泊尔参与灾后重建调研时,当地工程师递给我一份发皱的纸质表格——那是2015年大地震后他们手工录入的建筑评估记录。表格上"屋顶坍塌"、"地基移位"等潦草笔记背后…...

微信聊天记录安全备份完整指南:使用WeChatExporter开源工具保护数字记忆

微信聊天记录安全备份完整指南:使用WeChatExporter开源工具保护数字记忆 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 在数字化时代,微信聊天记…...

自动驾驶模仿学习避坑指南:为什么你的多模态融合模型总在十字路口“翻车”?

自动驾驶多模态融合的十字路口困境:从特征拼接走向全局理解的工程实践 当你的自动驾驶模型在封闭测试场地表现优异,却在无保护左转和行人突然穿行的复杂路口频繁"翻车"时,问题往往不在于单个传感器的精度,而在于那些看似…...

TranslucentTB:轻量级Windows任务栏透明化工具的深度解析与场景化应用

TranslucentTB:轻量级Windows任务栏透明化工具的深度解析与场景化应用 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Transl…...

第二章:从零构建你的首个量化交易策略

1. 初识量化交易与MindGo平台 第一次接触量化交易时,我完全被那些专业术语吓到了。什么"阿尔法因子"、"多因子模型"、"高频策略",听起来就像天书一样。直到后来发现MindGo这个平台,才真正体会到量化交易也可以…...

告别‘选择困难症’:用Envelope Q-Learning让AI学会在《超级马里奥》里权衡金币与速度

告别‘选择困难症’:用Envelope Q-Learning让AI学会在《超级马里奥》里权衡金币与速度 想象一下,你正在玩《超级马里奥》,面对前方闪闪发光的金币和即将关闭的关卡大门,必须在"快速通关"和"收集财富"之间做出…...

EF Core 拦截器实战:SaveChangesInterceptor、CommandInterceptor 与审计落地衷

一、背景与问题缘起 MySQL 5.6.51 版本下 2000 万行核心业务表开展新增字段操作,需求为新增BIGINT(19) NOT NULL DEFAULT 0 COMMENT 注释(因业务实际需要存储大数值关联字段)。 表的核心特性为Java 多线程密集读写,业务请求持续高…...

告别盲调!用逻辑分析仪抓取STM32F429 TIM1的PWM波形,一步步教你分析频率、占空比和死区

从代码到波形:STM32F429 TIM1 PWM硬件验证全流程实战 调试PWM输出时最令人头疼的莫过于代码看似正确,但硬件端却毫无反应——引脚电压纹丝不动,或者波形完全不符合预期。这种"软件配置正确,硬件行为未知"的困境&#xf…...

FPGA JESD204B链路调试实战:从时钟配置到同步状态解析

1. JESD204B接口基础:关键参数解析 第一次接触JESD204B接口时,我被那一堆参数搞得晕头转向。M、N、N、F、K这些字母组合看起来像密码一样,但理解它们对后续调试至关重要。让我用最直白的语言帮你梳理清楚。 M代表转换器数量,这个最…...

告别虚拟机!在Windows 11上零配置搭建Masm汇编实验环境(附保姆级图文教程)

在Windows 11上零配置搭建Masm汇编实验环境的完整指南 对于计算机专业的学生和汇编语言初学者来说,搭建一个可用的实验环境往往是第一道门槛。传统方法要么需要配置复杂的虚拟机,要么依赖过时的DOS模拟器,这些方案不仅占用系统资源&#xff0…...

深入解析MIPI RFFE接口:从寄存器操作到实战技巧

1. MIPI RFFE接口基础入门 第一次接触MIPI RFFE接口时,我也被它简单的两根线设计给"骗"了。表面上看就是个普通的串行接口,但实际开发中遇到的坑可不少。RFFE全称RF Front-End Control Interface,是MIPI联盟专门为射频前端模块设计…...

基于STM32LXXX的数字电位器(MAX5402EUA+T)驱动应用程序设计

一、简介: MAX5402EUA+T 是Maxim Integrated(现Analog Devices)推出的一款256抽头、低漂移数字电位器,采用MAX-8封装。 二、主要技术特性: 参数 值 抽头数 256个 端到端电阻 10kΩ 每级步进电阻 39.2Ω (10kΩ/255) 接口类型 SPI兼容,3线串行 电源电压 2.7V ~ 5.5V 温度…...

在昇腾Atlas 800I A2上,用vLLM-Ascend 0.9.1-dev部署Qwen2.5-7B的保姆级避坑指南

昇腾Atlas 800I A2实战:vLLM-Ascend部署Qwen2.5-7B的深度避坑手册 当你在Atlas 800I A2服务器上首次尝试用vLLM-Ascend部署Qwen2.5-7B模型时,可能会遇到各种官方文档未曾提及的"暗礁"。本文将从实战角度,拆解那些让开发者夜不能寐的…...

基于STM32LXXX的数字电位器(MCP4661-103E/ST)驱动应用程序设计

一、简介: MCP4661-103E/ST 是 Microchip 推出的双通道、8位(256抽头)数字电位器,采用 I2C 接口,阻值为10kΩ,内置 EEPROM 可掉电保存配置。 二、主要技术特性: 参数 值 通道数 2 (双通道) 电阻值 10 kΩ 抽头数 257 (8位分辨率,256步进) 接口类型 IC,标准模式100kHz…...

抖音无水印下载器终极指南:免费批量保存视频、图集与直播回放

抖音无水印下载器终极指南:免费批量保存视频、图集与直播回放 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…...

LLM的“小bug”:聊聊幻觉是什么,以及如何有效规避免

不管是日常使用ChatGPT、文心一言,还是接触各类开源LLM,你大概率都遇到过这样的情况:模型一本正经地给你讲一个知识点、报一组数据、提一个引用,说得头头是道、逻辑通顺,可你事后查证才发现,这些内容全是假…...

如何用TranslucentTB打造终极Windows透明任务栏:新手完整指南

如何用TranslucentTB打造终极Windows透明任务栏:新手完整指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 你是否厌倦了Wi…...

告别模拟器!手把手教你将Flutter App部署到树莓派4B(ARM64 Linux实战)

告别模拟器!手把手教你将Flutter App部署到树莓派4B(ARM64 Linux实战) 在物联网和边缘计算蓬勃发展的今天,开发者越来越需要将现代UI框架的能力延伸到资源受限的嵌入式设备。树莓派4B作为一款性价比极高的ARM64开发板,…...

番茄小说下载器:打造你的个人离线图书馆,随时随地畅享阅读

番茄小说下载器:打造你的个人离线图书馆,随时随地畅享阅读 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 你是否曾因网络信号不佳而错过精彩的小说章节…...

英语地点介词(in/on/at)的使用

一、核心原则介词核心逻辑就像……at一个具体的坐标点地图上的图钉 📍on一个表面/平面/线贴在墙上的一张纸 📄in一个有边界的立体空间装在盒子里的玩具 📦记忆口诀: at 是点,on 是面,in 是空间里面。二、具…...

ESP-Meshed:面向ESP32/ESP8266的轻量级分布式应用框架

1. ESP-Meshed 框架深度解析:面向 ESP32/ESP8266 的轻量级分布式应用构建框架1.1 框架定位与工程价值ESP-Meshed 并非 Espressif 官方 ESP-MESH 协议栈的替代品,而是一个面向嵌入式应用层的轻量级分布式框架。其核心设计哲学是:在不侵入底层网…...

别再只调参了!深入理解PCL网格化:从Delaunay三角剖分到法线一致性的底层原理

深入解析PCL网格化:从Delaunay三角剖分到法线一致性的工程实践 在三维重建领域,点云网格化是将离散采样点转化为连续表面的关键技术。许多开发者虽然能够调用PCL库完成基础网格生成,但当面对setNormalConsistency、setMaximumSurfaceAngle等参…...

Figma中文界面革新:突破语言壁垒的全攻略

Figma中文界面革新:突破语言壁垒的全攻略 【免费下载链接】figmaCN 中文 Figma 插件,设计师人工翻译校验 项目地址: https://gitcode.com/gh_mirrors/fi/figmaCN Figma作为主流设计工具,其英文界面长期困扰中文用户。FigmaCN插件通过设…...

AI时代,网络安全为何是人类最后壁垒?网安专业究竟有多重要?

网络安全专业:AI时代唯一被AI“反向增强”的人类堡垒 核心论断:网络安全不是AI的替代对象,而是AI的校准器、约束阀与免疫系统。当AI在其他领域扮演“执行者”,它在网络空间中必须是“被监管者”——而监管它的,只能是具…...

联合注入及布尔型盲注基础流程(手注sqli-labs-master)

SQL 注入的核心原理:一句话概括 攻击者通过在输入框或 URL 参数中,输入恶意的 SQL 代码,让数据库“误以为”这是正常的指令并执行,从而泄露数据。 联合注入(UNION-based Injection) 联合注入是 SQL 注入中最常见、也最容易理解…...

亚马逊,TEMU平台针对电动泵美国站的UL778标准

‌UL778是电动泵的安全标准‌,主要用于规范在日常使用场景下的潜水或非潜水电泵的安全性能,确保产品在北美市场的准入合规 。一、适用产品范围以下类型的电泵通常适用于UL778标准:‌潜水泵‌:电机可完全浸入水中运行的泵。‌非潜水…...

深入解析POODLE漏洞:SSL3.0的CBC模式安全隐患与防御策略

1. POODLE漏洞的前世今生 第一次听说POODLE漏洞时,我还以为是什么可爱的狗狗品种。后来才发现,这个听起来萌萌的名字背后,隐藏着一个足以让整个互联网颤抖的安全威胁。POODLE全称Padding Oracle On Downgraded Legacy Encryption,…...