Administrator
发布于 2023-12-28 / 2 阅读
0

SQL统计数量用count(*)还是count(1)

SQL统计数量用count(*)还是count(1)

  1. Ai Bing

    这是一个常见的sql问题,关于count(*)和count(1)的区别和性能。一般来说,count(*)和count(1)的结果是一样的,都是返回表中的行数,不包括null值。但是,count(*)和count(1)的性能可能会有所不同,取决于数据库的类型和版本,以及表的结构和索引。
    
    有些数据库,例如SQL Server,会对count(*)和count(1)进行优化,使它们的性能相同或者非常接近。这是因为SQL Server会根据表的元数据和索引来计算行数,而不是扫描表的所有列。因此,使用count(*)或者count(1)都是可以的。
    
    有些数据库,例如MySQL,会对count(*)进行特殊处理,使其比count(1)更快。这是因为MySQL会直接从表的存储引擎中获取行数,而不需要读取任何列的数据。而使用count(1)时,MySQL会扫描表的第一列,这会增加IO开销。因此,使用count(*)是更好的选择。
    
    总的来说,使用count(*)是一个更通用和更安全的做法,因为它可以适应不同的数据库和表的情况,而且更符合sql的语义。如果您想要更详细的分析和测试,您可以参考以下的链接:
    
    https://stackoverflow.com/questions/1221559/count-vs-count1
    https://www.sqlshack.com/count-vs-count1-vs-countcolumn-name-which-one-to-use/
    [https://www.percona.com/blog/2007/04/10/count-vs-countcol/](https://www.percona.com/blog/2007/04/10/count
    
  2. 搜索相关文章

    为什么阿里巴巴禁止使用 count(列名)或 count(常量)来替代 count(*)-阿里云开发者社区

    高性能MySQL——Count(1) OR Count(*)? - 知乎 (zhihu.com)