count(1)、count(*)、count(字段)

count(*)统计所有行,不忽略空值null,但不但要全局扫描,也要对表的每个字段进行扫描;

count(7):和count(3)、count(1)一样的,InnoDB引擎遍历整张表时,不取值,server层对于返回的每一行都放一个数字进去,按行累加;这样也不会忽略null值;而且相当于这里是扫描的一列,而不是全局,效率相对count(*)全表扫描高点;

count(字段):
count(主键id)把每一行的id值取出返回给server层,server层拿到id后,按行累加;
count(非主键)如果字段定义为非空,直接一行行从记录里读出该字段,按行累加;
count(非主键)字段定义允许为空,那么执行时还需要把值取出来判断是否为空后再累加

统计表中所有行不要加过滤条件,包括group by、where等,这样会统计到字段中不同值的个数;

针对这张表,统计所有行的行数
在这里插入图片描述
在这里插入图片描述

同时注意,不同引擎count(*)实现方式方式也不一样,MyISAMySQL引擎把一个表的总行数存在了磁盘上,因此执行count( )的时候会直接返回这个值,效率很高;
InnoDB引擎执行count(
)时,会将数据一行行的从引擎中读出来,然后累计计数;
以上是没条件过滤的情况下,如果有条件筛选,两种效率都一般;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值