COUNT()函数详解

本文详细介绍了MySQL中COUNT函数的不同用法及其性能考量,包括COUNT(*)、COUNT(1)、COUNT(column)、COUNT(DISTINCT column)和COUNT(expression)等,并通过实例说明了每种用法的特点。
摘要由CSDN通过智能技术生成

COUNT 顾名思义,就是计数的意思,此函数用处:对表中记录数进行计数。

MySQL COUNT()函数介绍

COUNT()函数返回表中的行数。 COUNT()函数允许您对表中符合特定条件的所有行进行计数。

COUNT()函数的语法如下 -

  COUNT(expression)
函数的返回类型为BIGINT。 如果没有找到匹配的行,则COUNT()函数返回0

COUNT函数有几种形式:COUNT(*)COUNT(1)COUNT(column), COUNT(DISTINCT column)COUNT(expression)

 

COUNT(*)函数

COUNT(*)函数返回由SELECT语句返回的结果集中的行数。COUNT(*)函数计算包含NULL和非NULL值的行,即:所有行。

如果使用COUNT(*)函数对表中的数字行进行计数,而不使用WHERE子句选择其他列,则其执行速度非常快。

这种优化仅适用于MyISAM表,因为MyISAM表的行数存储在information_schema数据库的tables表的table_rows列中; 因此,MySQL可以很快地检索它。

COUNT(1)函数

count(1)这个用法和count(*)的结果是一样的。

COUNT(DISTINCT COLUMN)

MySQL COUNT(DISTINCT column)返回不包含NULL值的唯一行数。

COUNT(COLUMN)

MySQL COUNT(column)返回不包含NULL值的所有行数。

COUNT(expression)

COUNT(expression)返回不包含NULL值的行数,expression 是表达式。

 

下面来看一下例子:

原表数据:

1、count(*)

SELECT COUNT(*) count FROM t_iov_help_feedback

结果:

可以看到,只要表中存在记录,不管是否有字段为NULL,都会被count出来,查询出来数量4(全部)

 

2、count(1)

SELECT COUNT(1) count FROM t_iov_help_feedback

结果:

可以看到,count(1)这个用法和count(*)的结果是一样的,查询出来数量为4(全部)

如果表没有主键,那么count(1)比count(*)快;

如果有主键,那么count(主键,联合主键)比count(*)快;

如果表只有一个字段,count(*)最快。

count(1)跟count(主键)一样,只扫描主键。count(*)跟count(非主键)一样,扫描整个表。明显前者更快一些。

 

3、count(column)

SELECT COUNT(UPLOAD_PICTURES) count FROM t_iov_help_feedback; 

结果:

可以看到,将UPLOAD_PICTURES 字段为 NULL 的记录不计算在内,有1条记录为NULL,所以查询出来数量为3。

 

4、count(DISTINCT column)

SELECT COUNT(DISTINCT UPLOAD_PICTURES) count FROM t_iov_help_feedback;

结果:

可以看到,将UPLOAD_PICTURES 字段为 NULL 的记录不计算在内,以及重复的记录只算1条。

有条记录为NULL,有两条记录UPLOAD_PICTURES 字段值重复(都为“s”),所以查询出来数量为2。

 

5、count(expression)

expression表示一个表达式,意思是在count中我们可以得到符合特点条件的记录数。

例子1,查询 is_reply=0 的数量:

SELECT COUNT(IF(is_reply=0,1,NULL)) count FROM t_iov_help_feedback;

结果:

可以看到,is_reply=0 的记录是3条,所以查询出来数量为3。

 

例子2,查询 is_reply=1 的数量:

SELECT COUNT(IF(is_reply=1,1,NULL)) count FROM t_iov_help_feedback;

结果:

可以看到,is_reply=1 的记录是1条,所以查询出来数量为1。

 

COUNT(IF(is_reply=1,1,NULL)) 语句解析:

IF(表达式1,表达式2,表达式3),

IF() 函数就是一个简单的判断器,它会判断第一个参数是否成立,如果成立,IF函数将返回表达式2,否则返回表达式3

这里意思是:如果is_reply=1,IF函数将返回1,否则返回NULL。 COUNT函数只计数1,而不是NULL值,因此查询根据相应的状态返回记录数。

 

性能问题:

1.任何情况下SELECT COUNT(*) FROM tablename是最优选择,(指没有where的情况);
2.尽量减少SELECT COUNT(*) FROM tablename WHERE COL = ‘value’ 这种查询;
3.杜绝SELECT COUNT(COL) FROM tablename WHERE COL2 = ‘value’ 的出现。

OK,That's all.

 

欢迎关注微信公众号(Java修炼记):

专注Java技术积累,免费分享Java技术干货、学习笔记、学习资料等,致力于让这里成为一个java知识小站。

 

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值