数据库学习之count(*)的实现方式

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值