`
myprincejava
  • 浏览: 31136 次
  • 性别: Icon_minigender_1
  • 来自: 来自太平洋
社区版块
存档分类
最新评论

发疯Hibernate分页问题,性能优化!

阅读更多

最近写了一个Hibernate分页,之前用游标来实现得到count 总行数..用HQL语句查询!可是现在问题出现了,但数据达到海量的时候,出现比较慢,现在要进行优化:

1.不能使用游标得到count总行数!

ScrollableResults rs = query.scroll(ScrollMode.SCROLL_INSENSITIVE);
  rs.last();
  return (rs.getRowNumber() + 1);

2.不能使用select count(*) from .....这样要得到count 和list 分布操作很麻烦!查询和count 都要同步!不想两次操作...

假如更改字段都要更改...不想这么做!要公用....

3.不能使用query.list().size()

 int count=query.list().size();

除了这三种方法实现得到count,不知道还能用什么方法去实现!相信javaeye上面大师们应该会出现这样情况吧!遇到过的提提建议...

分享到:
评论
56 楼 icewubin 2008-08-04  
池中物 写道
Criteria criteria = session.createCriteria(Blog.class);
return criteria.setProjection(Projections.rowCount()).uniqueResult();


这个就是select count(*)
55 楼 池中物 2008-08-04  
Criteria criteria = session.createCriteria(Blog.class);
return criteria.setProjection(Projections.rowCount()).uniqueResult();
54 楼 neptune 2008-08-04  
select count(*) 还能再优化吗?,还是把最常用的分页,第一页count(*)后结果和列表结果,缓存的好。第一页是最常用的了。
53 楼 jy02411368 2008-08-03  
我现在用的是displaytag经过优化了。。其实也不错 而且代码量很少
52 楼 icewubin 2008-08-02  
smilerain 写道
可以参考论坛的实现方法,做一个cache保存总数。添加就+1,删除就-1.
时不时的修正一下数据就可以了。


查询多半是带条件的,结果往往不是缓存的总数。

论坛的这种缓存策略只适合特定需求的。
51 楼 smilerain 2008-08-02  
可以参考论坛的实现方法,做一个cache保存总数。添加就+1,删除就-1.
时不时的修正一下数据就可以了。
50 楼 corelengine 2008-08-01  
查询结果写到session里用display tag
49 楼 mingli1223 2008-08-01  
根据业务来.数据量小,就count(*),量大就改策略如提前缓存.
48 楼 jackey3316 2008-07-31  
count(*) 有性能问题?  优化数据库看看~~
47 楼 liubat365 2008-07-31  
mysql数据库里面select count(*)时不能在条件里面加子查询,否则速度超级慢。
46 楼 icewubin 2008-07-31  
bhan2008 写道
select count(1) from ..... 应该会好一点吧


在Oracle下,count(1)和count(*)同样高效,其他数据库的效率不清楚,只要数据库优化,可能是也是一样的。

参考自
http://www.itpub.net/viewthread.php?tid=592976&extra=&page=3
45 楼 bhan2008 2008-07-30  
select count(1) from ..... 应该会好一点吧
44 楼 davidcen 2008-07-29  
第一次检索都要计算count值,传到页面做缓存;
from 表 发生变化,如join不同的表 也要重新计算count;
from表或者多表有增删操作,使用aop通知Pager重新计算count;
43 楼 SteveGY 2008-07-29  
count(*)? 有没有试过count(primary_key)?有一些数据库对count(*)会很慢的,postgresql几乎不对count(*)作任何优化,慢到要死,但换成count(pk)就飞快。
42 楼 xmvigour 2008-07-29  
我的建议:
  1、就是看看有没索引,这个设置好了 查询速度可以提高不少
  2、对于count的问题,我曾经这样做过 就是另写一个针对count的查询,理由是原来的查询基于hibernate的 有可能生成的sql过于繁琐,可能存在多表查询,当查询条件不针对于其它表的时候,完全可以改写为有一个对应的简便的sql查询。当然具体情况具体分析,在此我只是提出还有这样一种解决方案存在。
 
41 楼 bluemeteor 2008-07-29  
Unmi 写道
移除 order by 语句时用的代码是
Pattern pattern = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*" 
        , Pattern.CASE_INSENSITIVE);

如果是子查询里有 order by 语句,岂不是会从子查询的 order by 开始全部截掉,包括主查询的条件。


为什么要把order by加到子查询里?
40 楼 icewubin 2008-07-28  
Unmi 写道
移除 order by 语句时用的代码是
Pattern pattern = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*" 
        , Pattern.CASE_INSENSITIVE);

如果是子查询里有 order by 语句,岂不是会从子查询的 order by 开始全部截掉,包括主查询的条件。


是啊,所以说SpringSide的代码的参考价值很高啊,呵呵。
39 楼 caohj 2008-07-28  
建议用一个字段来存储count数,当有增加一条记录时count数+1,删除对应的一条记录时,count -1,查询分页的取count数时候直接去取一个字段记录就可以了.
38 楼 Unmi 2008-07-28  
移除 order by 语句时用的代码是
Pattern pattern = Pattern.compile("order\\s*by[\\w|\\W|\\s|\\S]*" 
        , Pattern.CASE_INSENSITIVE);

如果是子查询里有 order by 语句,岂不是会从子查询的 order by 开始全部截掉,包括主查询的条件。
37 楼 wcleye 2008-07-28  
icewubin 写道
tangbo530 写道
count(id) 会好一点点


有时候你的一句hql(sql)不包含id的。

查询数据库部分结果时应尽量使用索引字段,这样确实能提高性能.

相关推荐

    47-Java性能调优实战.zip

    模块七实战演练场则提供了实际场景下的调优实践,帮助学习者将理论知识转化为实际操作经验,解决真实世界中的性能问题。 最后,结束语部分可能总结了整个调优过程中的经验和教训,强调持续学习和实践的重要性。 综...

    额发疯埃尔法未发生阿萨德sad

    额发疯埃尔法未发生阿萨德sad

    一个让人发疯的小礼物

    标题中的“一个让人发疯的小礼物”似乎暗示着这是一款具有独特特性的软件,它可能在初接触时会带来一些挑战或困惑,但最终会给用户带来惊喜和乐趣。描述中的“最后让人开心的礼物”进一步确认了这款软件的娱乐性质,...

    70年代发疯的时代里最正常的艺术家.docx

    70年代发疯的时代里最正常的艺术家.docx

    QixRemake:406发疯了

    QixRemake是一款基于经典游戏Qix的重制版,而"406发疯了"这个描述可能指的是在游戏开发或者运行过程中遇到的一个特定问题,可能是版本号、错误代码或者是某种特定情况的表现。在Python编程中,这样的描述可能意味着...

    英语小组名称和口号精选.doc

    - "要成功,先发疯,下定决心往前冲!" 这些口号体现了坚持不懈、勇往直前、积极进取的精神。它们鼓励人们克服困难,坚信通过努力可以实现目标。无论是学习小组还是其他类型的团队,这些励志的话语都可以激励成员...

    从 0 开始带你成为消息中间件实战高手.zip

    文件“37 基于MQ实现订单系统的核心流程异步化改造,性能优化完成!”探讨了如何利用MQ来优化订单处理流程,提高系统性能。 接着,我们需要掌握MQ的集群建设和压力测试。文件“34 授人以渔:你们公司的MQ集群做过...

    LegacyFactions:Factions 1.6的高性能维护版本

    所有项目均保持开源状态,因此,如果有人想接管它们,请给我直接发送消息,以便我可以授予您访问该回购协议的权限,或者随意分叉它们-发疯! 大多数项目都足够稳定。 我将来可能会继续这些项目,但目前我也做不到。...

    2021关于高考学校横幅标语大全100句.docx

    2. **积极态度**:“主动的人在每一次忧患中都看到一个机会”,提醒学生面对困难时要积极寻找解决问题的办法,而不是被问题所困扰。 3. **持之以恒**:“狠抓基础是胜利的基础,持之以恒是胜利的保证”,强调长期...

    Scripts:一些脚本,分叉的,不要让我发疯!

    去做 很好地说明如何使用这些脚本 AddqBittorrentTrackers.sh 该脚本的目的是在qBittorrent torrent中注入木马,可以手动使用,也可以自动与Radarr / Sonarr一起使用。 实际上,由于API,这可以与qBittorrent v4.1 ...

    冰岛政治正确发疯!「Icelandic Political Correctness gone mad!」-crx插件

    用某些冰岛语替换某些冰岛语。 支持语言:English

    OnyX系统维护和配置

    Mac 用久了,也会有各种各样的问题。无用的日志/记录文件占据大量磁盘空间、字体缓存错乱导致界面字体发疯、磁盘权限出错导致文件无法打开等等等等。此时就需要“优化大师”、“超级兔子”之类的软件出马,清理或者...

    caiHongArchive:彩虹学发疯纪实录

    《caiHongArchive: 彩虹学发疯纪实录》 在信息技术领域,我们经常会遇到各种数据存储和传输的需求,而压缩包文件就是其中一种高效的方式。标题中的“caiHongArchive”很可能是一个自定义的或者特定项目的命名,代表...

    初中语文语文论文一个发疯的语文老师的帖子:感悟大师

    在当今教育界,语文教育一直占据着重要的位置。无论是对个人素养的培养,还是对文化传承的使命,语文教学都扮演着不可替代的角色。随着时代的发展,教育方式和理念也在不断创新与演变。在这样的背景下,三位中国语文...

    wenv:一个个人工作流程项目发疯了

    标题 "wenv:一个个人工作流程项目发疯了" 提示我们这可能是一个关于个人工作环境配置的项目,可能是为了优化Linux、Unix或者MacOS等操作系统中的终端体验。描述中的 "发疯了" 可能是指这个项目包含了大量自动化、...

    图像堆栈:获取3D图像文件,将其切成薄片,然后将生成的图像堆栈布置成一个漂亮的小蒙太奇。 添加蒙版和轮廓。 发疯!-matlab开发

    3D阵列,并在优化的网格中布置每个切片。 添加 遮罩和轮廓线可以使您的图像讲故事。 fig = IMAGEST(propertyArray)从中创建图像堆栈 propertyArray 无花果= IMAGEST(propertyArray,dataOptions,plotOptions...

    基于Web的系统的设计与实现

    在实际的Web系统开发中,优化资源使用、提升性能和保持用户体验的流畅性是非常关键的,这可能就是这个表述想要传达的含义。 【标签】"考试系统"表明我们将讨论的是一个特定类型的基于Web的系统,即用于在线考试的...

    ionic框架参考手册中文

    8. **性能优化**:由于混合应用的特点,性能优化是关键。手册会指导如何减少HTTP请求、优化资源加载、利用懒加载和使用IONIC Serve模式进行快速开发调试。 9. **打包与部署**:Ionic应用可以被编译为原生应用,然后...

    备战高考宣传标语.doc

    3. **目标设定**: 标语“要成功,先发疯,下定决心往前冲!”、“有大目标,须有大动作”鼓励设定明确的目标,并愿意付出巨大努力去实现。 4. **团队精神与协作**: “拧成一股绳,搏尽一份力,狠下一条心,共圆一个...

Global site tag (gtag.js) - Google Analytics