count(*)、count(1)、count(id)、count(某字段)的区别与性能分析

目录

一、查询规则

二、结论

三、百万条数据SQL测试

四、使用explain观察及原因分析


一、查询规则

count(*):获取表的条数

count(某一字段):获取某一字段值不为null的数据条数,就是说当某一条或者多条记录的那个字段为null的时候,这时并不会算进总条数中。

count(1):所有行进行统计,包括NULL行

count(id):count(*)查询的是总条数,count(id)查询的是id非null的条数。

二、结论

  • 如果你的数据表没有主键,那么count(1)比count(*)快  
  • 如果有主键的话,那主键(联合主键)作为count的条件也比count(*)要快  
  • 如果你的表只有一个字段的话那count(*)就是最快的啦  
  • count(*) count(1) 两者比较。主要还是要count(1)所相对应的数据字段。  
  • 如果count(1)是聚索引,id,那肯定是count(1)快。但是差的很小的。  
  • 因为count(*),自动会优化指定到那一个字段。所以没必要去count(?),用count(*),sql会帮你完成优化的
  • distinct 列名,得到的结果将是除去值为null和重复数据后的结果  
     

三、百万条数据SQL测试

 

四、使用explain观察及原因分析

 

 

 

你可能感兴趣的:(#,数据库及SQL,count(*),count(1),count(id),count,count())