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条)

报告相同问题?

悬赏问题

  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的
  • ¥15 r语言蛋白组学相关问题