数据库-数据库中如何快速获取某些条件下的count(*)
背景是需要经常性的获取某些条件下的count(*),对于小数据量直接count(*)可以,但数据量大了后呢,目前的做法是开另一个表,将这些条件下的count单独存起来,这样虽然访问快了,但维护起来比较困难。有什么两全其美的办法吗?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
如果使用数据库缓存呢?当该表数据产生变化才执行。
这个主要是看对数据的实时性要求是否高,要求不高的话可以把各种条件下的count 数放在memcache 里,key 中组合条件。定时更新memcache中各种条件下的count数。
这种方法基本上不用维护,写个crontab定时更新,或者直接依靠memcache的过期时间,而且效率比较高,但是数据不是实时的。
实时性要求比较高的话,那么基本思路就是采用消息队列异步更新,对这个表进行增,删,改 后,将这个更新的任务添加的队列,然后处理这个任务时需要对已知的条件进行全部更新,数据存放在db表中或缓存中都可以。
如果对数据精确度要求不高的话,可以取一个折中的方案。定时把目标表的总数存到中间表,程序直接从中间表获取总数。
传统的做法是读写分离,主从同步,主数据库只写,从数据库只读,这样效率会提高很多。
不过你的问题是只简单的处理count一些查询,除了做一些查询优化外,如果涉及表不多,中间表的方案可能更方便。