有你在真好 的个人博客
select count(-)的几种解决方案(绝对干货)
阅读:2043 添加日期:3/30/2021 5:42:10 PM

前段时间有个网友问我,他们公司的项目,有个分页显示总条数功能查询特别慢,数据量比较大,类似于下面这样子的功能。

select count(*)的几种解决方案(绝对干货)

其实这是一个很普通的功能。做后端的都会遇到这个问题,首先是全表查询然后在count出来,如果数据量比较小的话。应该不会有问题,但是数据量大了简直就是一个灾难,这其实是最不可取的。我给了他三种解决方案:

第一种方案:查询最后一条数据的id字段值,来当做总条数,当然id应该是自增的,但是这样查询可能不是很准确。如果要求不是太高的话。这种方案,还是可以考虑的。

第二种方案:另建一张汇总表,然后存储数据的总条数,每增加一次,就去这个汇总表增加一次,当然删除一条数据,就相应的也要减少一次。这样可能使插入的性能稍微有影响,但是,比起所节省出来的性能,这个完全可以忽略,毕竟读得多,写得少,还有一个原则是“慢写快读”。

第三种方案:那就是存到内存里面。存持久还是非持久的,就看个人喜好了。每增加或减少一条都去更新一下内存。

select count(*)的几种解决方案(绝对干货)

当然了除了以上场景还有其他很多,都可以用以上解决方案。只要是查询表的所有条数,大家都可以用以上的方案解决。千万不要 select count(*) 。