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 宇视监控服务器无法登录
  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥50 power BI 从Mysql服务器导入数据,但连接进去后显示表无数据
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)