如何最有效率的查询数据库中某个表的行数?

使用Hibernate实现数据持久化层,在我做分页的时候遇到一个性能问题,需要根据总记录数和每页记录数计算出总页数,所以查询总记录数是很难避免的。对于小表来说,问题不大,但是对于一张超级大表,性能上肯定会有问题。
我写的HQL语句:
查询SysUser表的总记录数:
[code="java"]
Select count(u.userId) Form SysUser u
[/code]

这样写可以实现,但是性能不是特别好,有没有更好的办法?

可以考虑折衷的方法,新建一个表,将几个表的总数保存到这个表中,每次做分页的时候查询这个表就好了,这也是个很常见的设计

比如说一个论坛.论坛将总贴数这个数值保存在论坛总表里面.或者版块,将一个版块下面的贴数保存在版块表里面.这2种设计都可以使得你不需要通过count来获得总数.这种方式的冗余对你这样大数据量的情况更加适合.也是属于必须的冗余.

这样设计的表,你在插入新数据的时候要额外的更新这个字段,但是当这个数值非常大的,时候,你未必要实时的更新这个字段,你可以在需要的,执行一下count,然后用count得到的数字来更新这个字段.

楼上说的很有道理,Select count(u.userId) Form SysUser u 这句话执行速度决于数据库,和hibernate没有什么关系,应该很难提高效率。

我觉得不是特别必要的话,不一定非得把所有分页一次性都展示出来。说实话真的到了count都很慢的表估计分页得成千上万页了,后面分页真有人会去点吗?还不如做点查询用起来才方便,然后用hibernate里的rownum控制下展示的总量会比较好。

Select count(1) Form SysUser u 会快点吧