对于count(主键id)来说, innodb引擎会遍历整张表,把每一行的id值都取出来,返回给server层,server层判断id值不为空,就按行累加
对于count(1)来说 ,innodb引擎遍历整张表,但不取值,返回给server层,server对于返回的每一行,放一个数字1进去,判断是不可能为空的,就按行累加
对于count(字段)来说,
如果这个字段定义为not null,一行行的从记录里面读出这个字段,判断不为空,则累加值
如果这个字段定义允许为null,那么执行的时候,判断到有可能为null,还要把值取出来在判断一下,不是null才累加
但是count()是例外
并不会把全部字段取出来,而是专门做了优化,不取值,count()肯定不是null,按行累加
所以这几个按照效率排序的话,count(字段)<count(主键id)<count(1)≈count()
所以,尽量使用count()
select count(1) from user跟select count() from user效率基本是一样的。
我觉得可以加一个统计信息的表,把主题数,帖子数等数据放到这个表里,但是这样就会牺牲一些写的效率,因为每次发帖删贴都要更新这个表。但是如果写的时候 *** 作数据一般不会太多,这个应该可以接受。
另外一个建议就是搞一个线程每隔多少时间来统计一下主题数,帖子数等数据,这样的数据就不是实时的了,但是那么大的数据量的时候这些数据的也么比较那么实时更新。
PS;bluedn,大数据量 *** 作的sql语句尽量不要使用sql的函数,尽量取了数据之后通过程序来处理得到想要的结果。
Count是用来统计数据个数的,跟SUM区别如下:
一、指代不同
1、Count:用来统计数据库中某一列数据的个数。
2、SUM:用来汇总数据库中某一列数据的合计值。
二、语法不同
1、Count:SQLCOUNT(column_name)语法,SELECTCOUNT(column_name)FROMtable_name。
2、SUM:SQLSUM()语法,SELECTSUM(column_name)FROMtable_name。
三、适用条件不同
1、Count:适用于ORACLE和MicrosoftSQLServer,但是无法用于MicrosoftAess。
2、SUM:适用于通用数据库。
参考资料来源:百度百科-COUNT函数
参考资料来源:百度百科-SUM函数
count 是用于统计查询结果的个数,属于聚合函数。
可以通过以下方面进行了解:
利用临时表进行测试
with tb as(
select 1 n from dual union all
select 1 n from dual union all
select null n from dual union all
select 2 n from dual union all
select 3 n from dual
)
1, 获取查询结果总行数
select count() from tb; -- 5由tb数据可见,tb中共有5条数据。
2,查询非null字段的行数
select count(n) from tb; -- 4该语句查询字段n不为null的总数量,由tb可见,n有一行为null,所以结果为4
需要注意,若n为非null字段,查询总数时,使用count() 比 count(n)速度要快。
原因是count(字段)在统计时,若字段为null,计数不加。若字段不是null,计数+1
3, 统计非空字段的非重复的内容数量
select count(distinct n) from tb; -- 3由于count(n)为获取非null字段数量。distinct为去掉重复值。所以,此结果为先去掉n的重复值再统计。
4,计算字段的非重复数量
select count(distinct nvl(n, 4) from tb; -- 5先提供null值为一个n中不存在的值,然后去掉重复值进行统计。
效果等同于
select count(distinct n)+1 from tb;以上就是关于MySQL的count(*)性能怎么样全部的内容,包括:MySQL的count(*)性能怎么样、求助:刚刚我用mysql执行了一个count函数,咋么时间那么长呢、数据库中Count是什么意思和SUM有什么区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)