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

目录

一、查询规则

二、总结

三、百万条数据SQL测试

一、查询规则

count(*):获取表的行数

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

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

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

二、总结

300万条数据做的测试~

count(可空字段) ≈ count(不带索引) < count(主键 id-带索引的) < count(1) ≈ count(*)

查询行的>查询带索引的字段>不带索引的字段

1)count(*)与count(1):

都是扫描全表,但不取值,包括了所有的列,相当于行数,在统计结果的时候,不会忽略NULL。count(1)包括了忽略所有列,用1代表代码行。

执行结果几乎是是一样的。

 2)count(1)与count(字段):
count(1) 会统计表中的所有的记录数,包含字段为null 的记录。
count(字段) 会统计该字段在表中出现的次数,忽略字段为null 的情况。即不统计字段为null 的记录。

所以count(1) 更快

 3)count(id)与count(非空字段):

索引有三种:唯一索引、主键索引和聚集索引,主键索引是唯一索引的特定类型。

该索引要求主键中的每个值都唯一。当在查询中使用主键索引时,它还允许对数据的快速访问。

 三、百万条数据SQL测试

Navicat存储过程批量生成测试数据

SELECT count(*) FROM `city`
SELECT count(0) FROM `city`
SELECT count(1) FROM `city`
SELECT count(id) FROM `city`
SELECT count(name) FROM `city`
SELECT count(state) FROM `city`
sql结果耗时
count(*)30120480.846s
count(1)30120480.850s
count(id)30120480.974s
count(name)30120001.032s
count(state)30120001.027s

有用请点赞,养成良好习惯!

疑问交流鼓励请留言!


  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

慕白Lee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值