> 本文对比 、 和 。 与 功能性能一致,统计所有行; 只统计列中非空行。推荐使用 统计总数。 这是一个在 MySQL 面试和实际工作中都经常被问到的问题。我们来详细解释一下 , 和 之间的区别。 结论先行(太长不看版) 1. 功能区别: 和 : 都会统计结果集中的所有行数,包括 值的行。它们的功能完全一样。 : 只统计指定列中非 值的行数。 2. 性能区别: 和 : 在现代 MySQL(特别是 InnoDB 存储引擎)中,性能没有区别。MySQL 优化器会把 自动优化成 ,并选择最优的索引进行计数。 : 性能取决于该列是否有索引。 如果没有索引,需要全表扫描,性能较差。 如果有索引,扫描索引即可,性能较好。但通常还是比 慢,因为 可以选择一个更小的二级索引来扫描。 3. 推荐用法: 想统计总行数时,永远使用 。这是 SQL 的标准写法,意图清晰,且性能最优。 想统计某列非空值的数量时,才使用 。 --- 详细解释 1. 是 SQL-92 标准中定义的用于计算行数的标准语法。 含义: 它会获取结果集中的所有行并进行计数。 在这里并不是指“所有列”,而是一个代表“所有行”的通配符...