用户登录
用户注册

分享至

mysql查询优化count(*)-查询记录总条数

  • 作者: 演瘾
  • 来源: 51数据库
  • 2020-08-09
经常有人提出一个观点,推荐使用count(1)代替count(*),说这样会提高性能。
 
那么这个是真的么?
 
首先了解下count()函数。它支持count(*)、count(1)、count(列名)等写法。
 
count(*)计算全部行总和
 
count(1)计算全部行总和,1代表一个固定值,不是第一个字段。其效果跟count(*)一样。
 
count(列名)计算该列值非null行总和
 
那么count(*)、count(1)到底谁的效率高?
 
经测试两者(表内数据200万)相差无几。
 
使用explain可以看到,优化器对两种写法的分析结果是一致的。所以,执行结果一致也就是必然。
 
在优化器中,我们看到,它会使用主键索引。这对于提升性能有帮助。所以,在有计算count()的表内尽量创建索引,尽量使用自增长字段作为主键。不仅在这种情况有帮助,对于很多情况都有好处。有兴趣的建议研究一下索引。
 
如果要使用count(列名),那么你要非常清晰的理解你要的结果。
 

 

软件
前端设计
程序设计
Java相关