通常情况下,分页接口一般会查询两次数据库,第一次是获取具体数据,第二次是获取总的记录行数,然后把结果整合之后,再返回。
例如:
select id,name from user limit 20; // 查询数据
select count(*) from user; // 查询数量
现在count(*) 查询数据效率很慢,想使用spring多线程完成性能优化,如何实现?
通常情况下,分页接口一般会查询两次数据库,第一次是获取具体数据,第二次是获取总的记录行数,然后把结果整合之后,再返回。
例如:
select id,name from user limit 20; // 查询数据
select count(*) from user; // 查询数量
现在count(*) 查询数据效率很慢,想使用spring多线程完成性能优化,如何实现?
count() 理论上只要索引合理,是没太多方案在sql数据库索引层面解决问题了而且使用count(),还特别慢的话,如果业务对总数不敏感的话,你可以考虑使用redis,对count(*)的结果进行缓存可以隔一两个小时失效同步一次数据,这样做虽然数据会出现延迟不过会在可接受范围内。如果要求敏感的话,你可以进行增量处理,先缓存数据库数据,然后没增加一个数据,就更新redis缓存,这样做的话,就算更新频繁也只会出现少量的用户量偏差,不特别影响数据观测
12 回答7.3k 阅读✓ 已解决
10 回答3k 阅读
8 回答2k 阅读✓ 已解决
3 回答957 阅读✓ 已解决
6 回答874 阅读✓ 已解决
4 回答1.5k 阅读✓ 已解决
4 回答831 阅读
SELECT SQL_CALC_FOUND_ROWS * from user; SELECT FOUND_ROWS()