count(*) count

Posted lin_sen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了count(*) count相关的知识,希望对你有一定的参考价值。

count(*) count(f)
count(*)统计表的行数,即使某一行全为null也会统计进来.
count(f) 统计f列非空的行数量.
明确了定义后,我们就能两者其实面向不同的需求层面.

性能问题:
count(*)要的是表的行数,而不管null问题,获取行数有几个渠道,全表扫(慢),走索引(快),走索引的问题是,空值是不会建索引的
所以从可为空的索引是无法获取到正确行数信息的.这样count(*)只能去全表扫描.
另外即使索引是唯一索引但是没有设定not nul属性,则数据库无法从索引获取到表的所有行数信息,只能全表扫描
这种情况下,count(f),如果f是唯一索引,则可以通过索引得到行数(count(f)因为他统计f列非空的行数量),效能自然高过count(*)
但是count(*)和count(f)的需求是不同的,所以这种比较其实没有意义.
如果表存在唯一非空索引(比如主键),则count(*)和count(f)性能相同.(f是主键)
count(1)是count(f)的另外一种写法而已.

以上是关于count(*) count的主要内容,如果未能解决你的问题,请参考以下文章

countcount(*)count(列名)的区别

count(*)countcount(column)的区别

执行countcount(*) 与 count(列名) 到底有什么区别?

SQL语句中countcount(*)count(字段)用法的区别

countcount(*)和count(指定字段)之间的区别

select count(*)countcount的区别和执行效率比较