zhengyutong 2009-03-20 17:56
浏览 345
已采纳

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

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

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

  • 写回答

3条回答 默认 最新

  • playfish05 2009-03-20 20:10
    关注

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 怎么用一个500W电源给5台60W的电脑供电
  • ¥15 请推荐一个轻量级规则引擎,配合流程引擎使用,规则引擎负责判断出符合规则的流程引擎模板id
  • ¥15 Excel表只有年月怎么计算年龄
  • ¥50 资源管理器无法使用且一直崩溃重启
  • ¥15 用sql语句完成下列问题
  • ¥50 yalmip+Gurobi 求解线性规划
  • ¥15 微信开发者工具/云函数/数据库
  • ¥15 Torch not compiled with CUDA enabled
  • ¥15 三种节点编号优化算法比较
  • ¥15 比特币ord程序wallet_constructor.rs文件支持一次性铸造1000个代币,并将它们分配到40个UTXO上(每个UTXO上分配25个代币),并设置找零地址