MySQL count(1)、count(*) 和 count(列名) 的区别与性能优化

发布时间:2026/8/30 9:21:46

MySQL count(1)、count(*) 和 count(列名) 的区别与性能优化
面试官一句“你说下 count(1)、count(*) 和 count(列名) 到底有什么区别”很多平时 CURD 写得飞起的同学当场就愣住了。原因很好理解这三条 SQL 写出来结果往往是一样的。既然结果一样平时根本不会去细想它们到底差在哪。但面试官偏偏就爱问这种“看起来简单、实际上考验原理”的问题因为它能快速筛出一个人是只会用还是真的理解 MySQL 的执行逻辑。先说我的判断这三者的区别不在“结果”而在“语义”和“性能路径”。90% 的人能说出 count(列名) 不统计 NULL但只有很少人能讲清楚 count(*) 在 InnoDB 里的特殊优化、count(1) 的本质是什么、以及为什么大表 count 会越来越慢。这篇文章就把这些问题一次讲透并且给出可以直接落地的优化方案。1. 先给结论三个 count 到底差在哪为了避免看到后面被细节绕晕我们先把最核心的结论放在最前面。写法统计内容是否统计 NULL典型性能表现count(*)统计所有行数统计NULL 也计入InnoDB 中有专门优化优先选最小索引扫描通常最快count(1)统计所有行数统计NULL 也计入与 count(*) 基本等价优化器会当作常量表达式处理count(列名)统计指定列非 NULL 的行数不统计NULL 被忽略如果列上有索引扫描索引否则可能全表扫描从结果上看只要表中没有 NULL 值三者的返回结果完全一样。这也是很多人搞不清区别的根本原因——你从来没在包含 NULL 的数据上测试过它们。1.1 count(列名) 的 NULL 陷阱很多人背过“count(列名) 不统计 NULL”但实际写 SQL 时常常忘记这一点。看这个例子CREATE TABLE user ( id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(50), age INT ); INSERT INTO user (name, age) VALUES (张三, 25), (李四, NULL), (NULL, 30), (王五, NULL);现在这张表有 4 行数据。执行下面三条 SQLSELECT count(*) FROM user; -- 结果4 SELECT count(1) FROM user; -- 结果4 SELECT count(name) FROM user; -- 结果3因为有一条 name 为 NULL SELECT count(age) FROM user; -- 结果2因为有两条 age 为 NULLcount(name)的结果是 3count(age)的结果是 2而count(*)和count(1)都是 4。这就是“语义”层面的核心区别count(*) 和 count(1) 数的是“行”count(列名) 数的是“非空值”。用业务语言翻译一下如果你想统计“有多少用户填了年龄”应该用count(age)如果你想统计“表里有多少条用户记录”应该用count(*)。选错的话统计数字会悄悄变少而且没有任何报错提示。1.2 count(1) 里的“1”到底是什么count(1)是很多初学者最容易误解的写法。有人以为它表示“只统计第一列”有人以为它比count(*)快这些都是错的。这里的1不是一个列名而是一个常量表达式。MySQL 在执行时相当于对每一行都计算一次常量1而常量永远不为 NULL所以每一行都会被计数。你可以把它理解成count(1)等价于“数一遍所有行每行发一个数字 1然后把 1 的个数加起来”。它的语义和count(*)完全一致都是统计总行数。2. 原理层MySQL 是如何执行 count 的知道结论只是第一步。面试官如果继续追问“为什么”你就要从 MySQL 的执行原理来回答。2.1 count(*) 的特殊优化很多人有一个根深蒂固的误解count(*)会把所有列都取出来所以性能很差应该用count(1)代替。这个说法在非常古老的 MySQL 版本里也许有一定道理但在现代 MySQL5.7 及以上中count(*)恰恰是优化器最照顾的写法。MySQL 官方文档明确说明count(*)并不会去解析和读取所有列它只负责数行数。优化器在做执行计划时会专门为count(*)寻找一条代价最低的扫描路径。这里的关键是MySQL 会选择一个最小的索引来扫描而不是扫描主键聚簇索引。什么是最小的索引在 InnoDB 中索引数据最终还是落到磁盘页上索引包含的列越少、每个索引条目越短扫描时需要读取的页就越少IO 开销就越低。比如一张表有一个(a, b, c)联合索引和一个(id)主键索引执行count(*)时优化器大概率会选(a, b, c)这个二级索引因为它比主键索引更小。这也是后面性能优化的一个重要理论基础。2.2 count(1) 和 count(*) 的真实关系count(1)和count(*)在 InnoDB 中的执行路径几乎是等价的。count(1)传入的常量1会被优化器当作一个永不为 NULL 的表达式不需要像count(列名)那样去判断列的 null 属性。所以它和count(*)一样最终都是走最优索引扫描统计所有行数。从实际开发角度看你不需要为了“性能”刻意把count(*)换成count(1)。两者在 InnoDB 下没有明显差异。很多老文章说count(1)快那是在 MyISAM 或者更早期 MySQL 版本下的结论现在已经不适用了。2.3 用 EXPLAIN 看执行计划光说理论不够我们用EXPLAIN来验证一下。EXPLAIN SELECT count(*) FROM user; EXPLAIN SELECT count(1) FROM user; EXPLAIN SELECT count(name) FROM user;在user表只有主键索引的情况下三个执行计划大概率都会显示type: index或者type: ALL并且key指向主键。这说明三者都需要扫描索引或全表。当你为name字段单独建一个索引后再看count(name)的执行计划ALTER TABLE user ADD INDEX idx_name (name); EXPLAIN SELECT count(name) FROM user;你会发现执行计划可能变成走idx_name索引扫描因为二级索引比主键聚簇索引更小扫描成本更低。这就是为什么“能不能走索引”会直接影响 count 查询的性能。小结一下count(*) 和 count(1) 走的是优化器选出的最优索引扫描路径count(列名) 是否能走索引取决于该列有没有索引以及优化器的成本评估结果。3. 存储引擎差异为什么 InnoDB 的 count 比 MyISAM 慢面试中还有一个高频追问为什么 MyISAM 表执行count(*)特别快而 InnoDB 表却很慢3.1 MyISAM 的“计数器”机制MyISAM 存储引擎在实现上会为每一张表额外维护一个精确的行数计数器。因为 MyISAM 不支持事务也没有行级锁和 MVCC表的结构和行数据在并发场景下的可见性非常简单。执行count(*)时MyISAM 直接读取这个计数器返回时间复杂度是 O(1)不管表里有 1 万行还是 1 亿行速度几乎一样。这个设计很巧妙但代价就是牺牲了事务能力和并发控制能力。3.2 InnoDB 为什么不能缓存行数InnoDB 不能这么干核心原因是事务隔离和 MVCC。在 InnoDB 中不同事务在同一个时刻看到的行数可能是不一样的。举个最经典的例子-- 事务 A START TRANSACTION; SELECT count(*) FROM orders; -- 此时返回 100 -- 事务 B在另一个连接中 START TRANSACTION; INSERT INTO orders ... COMMIT; -- 事务 A 再次执行 SELECT count(*) FROM orders; -- 如果隔离级别是 REPEATABLE READ返回还是 100事务 A 两次查询返回相同的结果是因为它可以读到一致的快照。如果 InnoDB 也像 MyISAM 一样维护一个全局的行数计数器那么这个计数器应该对谁可见事务 A 看不到事务 B 插入的数据但事务 C 又应该看到一个全局计数器根本无法满足这种隔离语义。所以 InnoDB 必须实时扫描索引行来统计行数并且把判断“哪些行对当前事务可见”的逻辑加进去。这就是为什么 InnoDB 表数据量大了之后count(*)会越来越慢。3.3 这对我们的启示理解了这一点就能回答一个经典问题为什么同样的 count 查询在 MyISAM 上秒回在 InnoDB 上就要扫很久不是因为 InnoDB “弱”而是因为它要做更多正确的事。MyISAM 的计数器虽然快但它不支持崩溃恢复后的一致性读取也没有行级事务隔离在现代业务中已经很少使用了。我们不应该为了让count(*)变快而退回 MyISAM而是应该在 InnoDB 的基础上想办法优化查询。4. 性能关键索引选择如何影响 count既然 InnoDB 的 count 必须扫描那么扫描什么就决定了性能。这里有两个核心点一是扫描的索引大小二是回表次数。4.1 为什么 count(*) 会优先选二级索引前面说过InnoDB 的主键是聚簇索引二级索引的叶子节点存放的是索引列值和主键值。聚簇索引的叶子节点存放的是整行数据所以聚簇索引占用的空间远大于二级索引。同样的数据量扫描主键索引需要读更多的数据页而扫描一个只包含单个列的二级索引每个数据页能容纳更多索引条目。优化器的成本模型会算清楚这笔账然后选择更小的二级索引来执行count(*)。所以你会发现一个有意思的现象一张表如果只有一个主键索引count(*) 会扫描主键如果额外加了一个短字段的二级索引count(*) 反而可能更快。因为它扫描的索引变小了。这也是大表 count 优化最直接的一个手段提供一个足够小的二级索引。4.2 count(列名) 什么时候会全表扫描如果 count 的列没有索引MySQL 只能扫描主键聚簇索引也就是全表扫描因为只有聚簇索引包含了全部列才能判断这个列是否为 NULL。如果该列有二级索引情况就不一样。二级索引本身已经包含了该列的值而且索引中不存储 NULL 值InnoDB 一级索引和二级索引对 NULL 的处理是索引列全部为 NULL 的记录不会进入二级索引这里可以做简化理解重点是二级索引可以快速判断非空。所以count(列名)可以直接扫描这个二级索引成本会比全表扫描低很多。这也是为什么建议如果你经常需要count(某个可空列)可以考虑给这个列加一个二级索引。4.3 count(列名) 与 NOT NULL 约束如果某个列有NOT NULL约束那么count(列名)在语义上其实和count(*)没有区别因为这个列永远不会是 NULL。但要注意MySQL 优化器并不总是能推理出这一点。在 MySQL 8.0 中情况有所改善但如果你写的列是一个允许 NULL 的列优化器必须老老实实去扫描索引判断非空。这也是count(name)有时比count(*)慢的原因之一它需要多做一次“是否为 NULL”的判断即使这个判断在索引扫描中可以顺便完成。5. 大表 count 的四个工程优化方案理解了原理我们回到实际开发。一张几千万行的大表count(*)要跑好几秒这时候不能只甩一句“加索引”——因为就算加了索引MySQL 还是要把索引整个扫一遍才能出精确值。真正的工程优化思路有四类。5.1 方案一用更小的二级索引这是改动最小、收益最直接的方式。如果你的业务频繁执行count(*)可以检查表的索引情况看是否有足够小的二级索引。-- 假设大表 biz_order 只有一个主键 -- 可以加一个短小的二级索引例如状态列 ALTER TABLE biz_order ADD INDEX idx_status (status);加完索引后执行EXPLAIN SELECT count(*) FROM biz_order;大概率会看到执行计划走了idx_status而不是主键。注意这个方案并不是“不扫描”而是让扫描的数据量更小。它适合表还不是特别大、count 频率也不是特别高的场景。5.2 方案二单独维护计数缓存或汇总表这是互联网大厂最常用的方案。既然精确 count 太慢那就不要让 MySQL 实时算而是在业务层维护一个计数。最简单的做法是用 Redis每次插入一条数据执行 INCR order_count 每次删除一条数据执行 DECR order_count 查询总数时直接 GET order_count但这个方案有两个坑第一个坑是数据不一致。应用层写入 MySQL 成功、更新 Redis 失败或者反过来计数就对不上了。要缓解这个问题可以改成先写 MySQL再通过 binlog 异步同步到 Redis或者定时任务做对账。第二个坑是计数语义被简化。如果业务上需要按条件 count比如count(*) WHERE status 1那么一个简单的计数器就不够了可能要维护多个维度计数复杂度会明显上升。更稳妥的工程做法是建一张独立的统计汇总表用事务保证主表和统计表的写入一致性CREATE TABLE biz_order_count ( count_key VARCHAR(50) PRIMARY KEY, total BIGINT NOT NULL ); -- 插入订单同时更新统计表 START TRANSACTION; INSERT INTO biz_order (...) VALUES (...); UPDATE biz_order_count SET total total 1 WHERE count_key ALL; COMMIT;这样 count 的准确性和一致性有数据库事务保证查询也快。代价是增加了一次写操作和一张表适合读多写少、统计口径稳定的场景。5.3 方案三用估算值替代精确值很多业务场景其实不需要精确总数。比如后台管理列表展示“共 X 条”用户很少在意 X 到底是 1234567 还是 1234568。此时可以用 MySQL 自带的统计信息来估算SHOW TABLE STATUS LIKE biz_order;或者走 information_schemaSELECT table_rows FROM information_schema.tables WHERE table_schema your_db AND table_name biz_order;table_rows是一个估算值来自 InnoDB 的索引统计信息不是实时精确值但拿来做分页展示、运营看板完全够用。这也是很多报表系统的通用做法。5.4 方案四按业务拆分统计范围如果数据会定期归档可以按时间分区然后分别统计最近分区和历史归档数据。这样单次 count 扫描的数据量可以控制在合理范围。-- 按创建时间分区 CREATE TABLE biz_order ( id BIGINT NOT NULL, created_at DATETIME NOT NULL, ... PRIMARY KEY (id, created_at) ) PARTITION BY RANGE (TO_DAYS(created_at)) ( PARTITION p202501 VALUES LESS THAN (TO_DAYS(2025-02-01)), PARTITION p202502 VALUES LESS THAN (TO_DAYS(2025-03-01)), PARTITION p202503 VALUES LESS THAN (TO_DAYS(2025-04-01)) );这种方案适合数据有明确生命周期、统计维度比较固定的业务比如订单、流水、日志。5.5 一个容易被忽略的场景count 与 UNION有同学问过select count union是什么用法其实就是在处理多个查询结果合并时要小心统计口径。-- 错误示范直接把两次 count 结果 union 起来 SELECT count(*) FROM order WHERE type 1 UNION ALL SELECT count(*) FROM order WHERE type 2; -- 正确做法用条件聚合一次算出来 SELECT SUM(CASE WHEN type 1 THEN 1 ELSE 0 END) AS type1_count, SUM(CASE WHEN type 2 THEN 1 ELSE 0 END) AS type2_count FROM order;每次 count 都全表扫一次UNION 两次就扫两遍。用条件聚合可以只扫一遍这是 SQL 优化里很实用的小技巧。6. 常见误区与面试追问这一节把面试中经常出现的误区和追问整理成表格方便大家直接背诵和自查。常见误区正确理解count(1) 比 count(*) 快现代 MySQL InnoDB 下两者基本等价count(*) 会读取所有列不会优化器只数行数不解析列数据count(列名) 比 count(*) 快不一定取决于列是否有索引、是否可空count(*) 走主键索引最快InnoDB 下会选最小二级索引而不是主键索引MyISAM 快是因为它更先进错它牺牲了事务和并发一致性count(列名) 会统计 NULL不会NULL 会被忽略6.1 面试官常追问的三个问题面试官在你说完基础区别后通常会继续追问追问一count(*) 会不会做全表扫描严格说InnoDB 下 count(*) 是扫描索引不是传统意义上的全表扫描。如果表上没有任何二级索引它扫描的是主键聚簇索引这和全表扫描基本等价。如果有二级索引它扫描二级索引。所以回答“它扫描的是最优索引未必是主键”会更有深度。追问二为什么表数据量翻倍后count 时间不是翻倍这个问题有点陷阱。数据量翻倍扫描的数据页大致翻倍时间通常也会明显增长。但因为有 InnoDB 缓冲池缓存部分页可能已经在内存中所以实际耗时不一定严格翻倍。回答时说明这一点即可不用过度展开。追问三线上有张大表count(*) 要 5 秒你怎么优化这个前面已经给出了方案你可以按下面的思路回答加一个小而全的二级索引减少扫描成本如果业务允许用缓存或汇总表维护计数如果不需要精确值用 information_schema 的估算值如果数据有生命周期考虑分区或归档后分段统计。6.2 分页场景下的 count 优化还有一个非常常见的业务场景分页查询。业务需要先count(*)拿总数再LIMIT拿当前页数据。当数据量很大时这个 count 会成为接口的瓶颈。此时可以考虑先只查当前页数据再把“总数”改为一个近似值比如通过索引统计估算或者把总数缓存起来定时刷新。很多 C 端列表页其实不需要每次请求都实时算总数。7. 最佳实践与工程建议结合前面的原理和方案这里总结几条可以直接落到项目里的建议。7.1 开发时如何选择业务需求推荐写法原因统计表总行数count(*)官方优化最到位语义清晰统计某列非空数量count(列名)语义准确能走索引更好不需要精确值information_schema.table_rows毫秒级返回高频计数汇总表 / Redis binlog避免实时扫描大表7.2 注意一致性设计如果你选择用汇总表或者 Redis 维护计数一定要设计好对账机制。任何分布式系统都存在失败的可能没有对账的缓存计数就是一颗定时炸弹。可以每天凌晨跑一次全量 count和缓存中的值比对发现差异后自动修正。7.3 监控慢 SQL在 MySQL 中超过long_query_time的 SQL 会记录到慢查询日志。建议把大表 count 的监控阈值单独调出来观察它在业务高峰期的表现。-- 查看当前慢查询阈值 SHOW VARIABLES LIKE long_query_time; -- 动态调整临时生效 SET GLOBAL long_query_time 1;如果发现某个 count SQL 频繁出现在慢日志里就要考虑走 5.2 或 5.3 的方案而不是继续加索引硬扛。7.4 版本相关提醒不同 MySQL 版本的优化器行为可能有差异。本文的结论基于 MySQL 5.7 和 8.0 的常见行为。如果你还在用 5.6 或更早版本建议先看执行计划不要盲目套用结论。MySQL 8.0 对 count 的优化更完善但核心语义是一样的。8. 总结回到文章开头那个面试场景。如果现在再让你回答“count(1)、count(*) 和 count(列名) 到底有什么区别”你可以这样组织答案语义上count(*) 和 count(1) 都统计所有行数包括 NULLcount(列名) 只统计该列非 NULL 的行。原理上InnoDB 下 count() 有专门优化会选择最小的二级索引扫描不会读取所有列count(1) 的常量 1 不可能是 NULL所以和 count() 基本等价count(列名) 需要额外判断 NULL性能取决于该列是否有索引。引擎上MyISAM 用计数器所以快InnoDB 因为 MVCC 和事务隔离必须实时扫描所以大表慢是正常的。优化上可以用小索引、汇总表、缓存、估算值、分区等方式让 count 不再成为业务瓶颈。最后给你一个最实用的记忆点在 InnoDB 下写 count(*) 最省心不要为了玄学性能去换成 count(1)搞不清要不要统计 NULL 时用 count(*) 数行数用 count(列名) 数非空值。把这句记牢面试和写代码都不容易出错。

相关新闻

燕双非面试记:Spring Boot + Kafka + Redis + Spring Security + RAG,聊聊互联网大厂 Java 求职者怎么答

燕双非面试记:Spring Boot + Kafka + Redis + Spring Security + RAG,聊聊互联网大厂 Java 求职者怎么答

2026/8/30 9:21:46

燕双非面试记:Spring Boot Kafka Redis Spring Security RAG,聊聊互联网大厂 Java 求职者怎么答场景:某互联网大厂校招/社招 Java 面试现场,业务方向为“智能客服 订单中心 AIGC 辅助运营平台”。第一轮:基础能力…

谷歌重注AI资本开支,搜索广告金鹅面临三重挤压

谷歌重注AI资本开支,搜索广告金鹅面临三重挤压

2026/8/30 9:21:46

“At the altar of AI capex, Google is sacrificing the golden goose”,这句话直译过来是:在 AI 资本开支的祭坛前,谷歌正在牺牲那只下金蛋的鹅。 这里的“金鹅”指的就是谷歌最核心的搜索广告业务。而“祭坛”,则是动辄百亿级…

分析哲学如何主导AI认知:从可验证性到工程实践的反思

分析哲学如何主导AI认知:从可验证性到工程实践的反思

2026/8/30 9:21:46

如果你经常刷 AI 领域的技术讨论,大概会发现一个现象:所有关于“模型是否理解”“智能体是否自主”“AI 是否安全”的争论,最后都会收敛到同一套语言上——逻辑、概率、可验证性、最优解。这套语言背后的哲学框架,就是分析哲学对 …

嵌入式系统的日常巡检

嵌入式系统的日常巡检

2026/8/30 10:31:48

嵌入式系统的日常巡检嵌入式系统一旦进入长期运行阶段,问题往往不是突然出现的。存储空间慢慢减少、设备温度在某些时段升高、网络偶尔断开、传感器偶发读数异常、服务重启次数增加,这些都可能先以很小的迹象出现。日常巡检的意义,就是把这些…

Mac 上 3 步跑通 GPT-SoVITS:1 分钟语音数据做零样本声音克隆

Mac 上 3 步跑通 GPT-SoVITS:1 分钟语音数据做零样本声音克隆

2026/8/30 10:31:48

Mac 上 3 步跑通 GPT-SoVITS:1 分钟语音数据做零样本声音克隆 【免费下载链接】GPT-SoVITS 1 min voice data can also be used to train a good TTS model! (few shot voice cloning) 项目地址: https://gitcode.com/GitHub_Trending/gp/GPT-SoVITS GPT-SoV…

如何从源码构建 oMLX.app:xcodebuild + venvstacks + ad-hoc 签名全流程

如何从源码构建 oMLX.app:xcodebuild + venvstacks + ad-hoc 签名全流程

2026/8/30 10:31:48

如何从源码构建 oMLX.app:xcodebuild venvstacks ad-hoc 签名全流程 【免费下载链接】omlx LLM inference server with continuous batching & SSD caching for Apple Silicon — managed from the macOS menu bar 项目地址: https://gitcode.com/GitHub_Tr…

3步跑通Daytona沙箱:AI代码执行快速上手

3步跑通Daytona沙箱:AI代码执行快速上手

2026/8/30 10:31:48

3步跑通Daytona沙箱:AI代码执行快速上手 【免费下载链接】daytona Daytona is a Secure and Elastic Infrastructure for Running AI-Generated Code 项目地址: https://gitcode.com/GitHub_Trending/dayt/daytona 当你需要把一段 AI Agent 生成、"不确…

裸机实验失败后的定位方法

裸机实验失败后的定位方法

2026/8/30 10:31:48

裸机实验失败后的定位方法裸机实验失败时,信息往往比在完整系统里更少:没有成熟的日志平台,没有容器隔离,也未必有稳定网络。设备可能只是停在启动阶段、外设没有响应,或者程序运行一段时间后无声退出。越是这种场景&a…

滴滴2017秋招测试岗笔试真题解析:高频题型与测试思维拆解

滴滴2017秋招测试岗笔试真题解析:高频题型与测试思维拆解

2026/8/30 10:21:48

前阵子翻旧资料,翻出一份滴滴出行2017秋招测试岗的笔试记录,重新看完一遍,发现很多题目放到今天依然是各大厂测试岗笔试里的常客。当时我被好几道题卡过,后来真正做了多年测试,才慢慢读懂出题人到底在考什么——不是死…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/8/30 0:01:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/30 0:01:07

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/30 0:01:07

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

备战数据库管理工程师校招:索引、事务、备份恢复核心考点解析

2026/8/30 0:01:07

每年校招季我都会接触不少准备数据库方向笔试的同学,看到最多的状态就是:简历上写着“熟悉 MySQL”“了解索引优化”,一碰到数据库管理工程师的笔试卷,却在索引、事务、锁、备份恢复这些题目上翻车。网易这套 2018 校园招聘数据库…

数字电路时序基石:深入理解建立时间与保持时间

数字电路时序基石:深入理解建立时间与保持时间

2026/8/30 0:01:07

1. 这不是“背公式”的事:时间参数到底在约束什么你翻过数字电路教材,一定见过这两个词:建立时间(Setup Time)和保持时间(Hold Time)。它们常被并列写在触发器(Flip-Flop&#xff09…

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

蓝桥杯国赛超声波测距机:从单片机原理到嵌入式系统实战

2026/8/30 0:01:07

1. 项目缘起:从赛题到超声波测距机的诞生第八届蓝桥杯单片机设计与开发国赛的题目,我至今记忆犹新。它没有直接给出一个花哨的名字,而是用“超声波测距机”这个朴实无华的功能描述,精准地勾勒出了考核的核心。对于当时备赛的我而言…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/28 7:35:26

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/28 7:34:51

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/28 7:34:35

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…