首页 > 其他 > 详细

count(*) count(1)

时间:2018-04-09 18:32:51      阅读:167      评论:0      收藏:0      [点我收藏+]

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(1)

原文:https://www.cnblogs.com/reachlins/p/8761443.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!