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 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵