mysql count 优化问题

使用jdbcTemplate,做统一的分页查询的时候,
count(*)在数据量大的时候,总数查询非常慢,
有什么好的解决方案,
count(1)和count(*)就不要说了
也建了适当的索引,
使用结果集的游标直接指向最后能有效果么?

count(索引),你分页查询要count干嘛?

 count(id)

分页了,还要cont是为了显示总条数?

大概的一个解决方案:

在某个空闲时间。比如每天0点,统计你要分页的这个表的总数,保存到另外一个表的字段里面去,
在当天之后的时间里,每次新增、删除数据到这个表的时候,同步更新另外一个表里面的总数。

这样每次获取的时候可以直接获取。

首先count(主键)肯定比count(*)|count(1)快,count(*)|count(1)的效率没有太大差别,count(主键)效率明显高
其次:你的场景是数据量非常大,呢么,用户很少会翻到最后一页,所以,可以将总数缓存起来,比如缓存到redis,当用户翻到最后一页的时候,再执行count更新redis缓存总数.另外可以设置一个定时任务,比如每隔2个小时,进行一次自动更新缓存,当然,这个有呢个万一的可能性就是用户在读最后一页,这时候执行更新,而定时任务恰好也执行!但是因为数据量非常大,这个总数本就可以做为一个近似数,没有必要保证一定是多少,所以这个误差完全空可以忽略不计,在这样的前提下,呢么等于你每次分页只需要拿你某一页的数据去数据库查,而永远不需要进行count计算,效率肯定快,而你的count计算要么是定时任务更新,要么是用户触发最后一页.所以这样的情况下,效率会高很多