码迷,mamicode.com
首页 > 其他好文 > 详细

count(*) count(1)

时间:2018-04-09 18:45:48      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:唯一索引   不同的   not   面向   性能   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(1)

标签:唯一索引   不同的   not   面向   性能   count   数据   不同   设定   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!