1 由于InnoDB引擎的内部结构中,存在着多版本并发控制的原因(MVCC),InnoDB对于表”应该返回多少行“是不确定的。因此,在count()的时候,是一条条记录查找,再做累加。
2 虽然count()不是特别块,但是还是进行了一定程度的优化
具体是:在保证逻辑正确的前提下,尽量减少扫描的数据量,这也是数据库系统设计的通用法则之一。Mysql 优化器会找到最小的那颗索引树进行遍历。
3 当一个页面经常要显示交易系统的操作记录总数,通过自己计算来完成计数
基本思路:需要自己找一个地方,把操作记录表的行数存起来。
方法一:用缓存系统保存计算。可以用一个Redis服务来报存这个表的总行数。但是通过将计数保存在缓存系统中这种方式,会带来丢失更新的问题。同时,即时Redis正常工作,这个值在逻辑上也是不精确的
方法二:在数据库保存计算。把这个计数直接放到数据库里单独的一张计数表C中。
4 不同的count用法
count()是一个聚合函数,对于返回的结果集,一行行地判断,如果count函数的参数不是NULL,累计值就加1,否则不加。最后返回累计值。
count(*)、count(主键id)和count(1)都表示返回满足条件的结果集的总行数。
count(字段):返回满足条件的数据行里面,参数”字段“不为NULL的总个数
按效率排序:count(字段)< cou nt(主键id) < count(1) == count(’’)
数据库学习之count(*)的实现方式
最新推荐文章于 2023-10-25 14:15:48 发布