MYSQL–count(*) 和 count(1)和count(列名)区别

te>

1. count(1) and count(*)

当表的数据量大些时,对表作分析之后,使用
count(1)
还要比使用
count(
)
用时多了!

从执行计划来看,
count(1)

count(
)
的效果是一样的。 但是在表做过分析之后,

count(1)
会比
count(*)
的用时少些(
1w
以内数据量),不过差不了多少。

如果
count(1)
是聚索引
,id,
那肯定是
count(1)
快。但是差的很小的。

因为
count(
),
自动会优化指定到那一个字段。所以没必要去
count(1)
,用
count(
)

sql

帮你完成优化的 因此:
count(1)

count(*)
基本没有差别!

2. count(1) and count(
字段
)

两者的主要区别是


1

count(1)
会统计表中的所有的记录数,包含字段为
null
的记录。


2

count(
字段
)
会统计该字段在表中出现的次数,忽略字段为
null
的情况。即不统计

字段为
null
的记录。

3. count(*)

count(1)

count(
列名
)
区别

执行效果上:

count(*)
包括了所有的列,相当于行数,在统计结果的时候,
不会忽略列值为
NULL

count(1)
包括了忽略所有列,用
1
代表代码行,在统计结果的时候,
不会忽略列值为

NULL

count(
列名
)
只包括列名那一列,在统计结果的时候,会忽略列值为空(这里的空不是

只空字符串或者
0
,而是表示
null
)的计数,即某个字段值为
NULL
时,不统计。

执行效率上:

列名为主键,
count(
列名
)
会比
count(1)

列名不为主键,
count(1)
会比
count(
列名
)

如果表多个列并且没有主键,则
count

1
) 的执行效率优于
count

*

如果有主键,则
select count
(主键)的执行效率是最优的

如果表只有一个字段,则
select count

*
)最优。