在查询数据库的时候,由于数据量大,我要做分页,然后首先获取总的条数,但是使用sql语句SELECT COUNT(*) as total
from 表
WHERE addtime between 1164038401 and 1511235339;这条sql等于遍历了全表,数据有一百万条,id为主键索引,addtime为普通索引。现在问题是一使用这条语句内存使用量就从一开始的30%多直接上升到90%多,怎么解决这个内存问题?
我现在只是查询个数,但是分页的时候会查询有条件的大量数据,对于内存过大,有什么好的解决办法?比如sql不使用缓存,修改配置文件等等。
求大神指导,谢谢!
对于几百万行+的大表来说,COUNT(*)是非常耗时的,你看能不能换个方式处理下。
要么在业务上索性就不统计,你想想你做分页,每页10条数据,两百万行就是 20 万页,你统计了别人会翻这么多页吗。
另一种方式就是如果你的主键是连续递增的,就可以通过边界值相减得到统计结果,这比你直接 count 肯定是减少了不少时间。