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
(
*
)最优。