大批量的数据分页显示性能问题?

nylwin 2007-01-31 03:19:43
Oracle9i数据库,50万条记录,做分页显示时候,页面调用显示速度大约要2-3秒才能显示出。

Struts+spring+hibernate 系统,tomcat服务器


大体的查询语句是这样的:
firstResult ,maxResults是分页传递的值

String q = "select userid,username,id,careername from Career order by id desc;
Query query = s.createQuery(q);
query.setFirstResult(firstResult);
query.setMaxResults(maxResults);
List list = query.list();
return list;

不知道在还能做哪些改进 来提高查询速度呢,希望得到大家指点!谢谢



...全文
413 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
hengzhezou520 2007-02-01
  • 打赏
  • 举报
回复
Hibernate的分页查询SQL已经是最优了

提出抗议!!

Hibernate这么强大的工具,起内核处理是个复杂的过程,

很简单的道理,用自己的DAO和BEAN连接数据库,查出数据,比不用类,用集合直接查出数据绝对要慢,大家不会感觉,C++查询的速度比JAVA要快很多吗?这除了算法问题外,还得明白,面向对象编程,是简化了开发周期的调试,提高了效率,但是这个效率是指工作效率,不是指速度,或许大家,用JB开发东西,可以深切体会到,占用内存的比例吧。
Hibernate内核怎么做成的,我不知道,但是大家想一下,大家做AJAX的时候,不用DWR框架,而用自己写的XMLREQUEST做,才不要10行代码,就上XML转化,也觉得不需要DWR这么多东西,和判断,这样明显的例子说明了最肤浅的问题,例如你做一个标签可以通用,可是其中你必须得用到JAVA反射技术和很多判断,这比不用TAG绝对要很多,这点谁都不可否认

对于2楼这位朋友
Hibernate的分页查询SQL已经是最优了
提出严重的质疑,Hibernate可以用索引,难道我们自己就不能写索引呢吗?换句话说,Hibernate做的SQL操作和我们写的SQL是一样的,只是它肯定还会比我们多很判断和错误处理。
为什么,做搜索引擎的要自己写操作系统呢??

当然,我这是单纯以单纯以速度这点去说这个观点的,大家在做项目的时候完全可以不用MVC模式,对于一下些小项目,相反的采用这些模式,相反的是提高了工作难度和效率。
用框架和组件的同时,我希望大家明白起原理,真不希望一个用了1年后的Hibernate人才连SQL语句都会写
nylwin 2007-01-31
  • 打赏
  • 举报
回复
我直接在oracle上写SQL 执行:时间不超过1秒的

SELECT * FROM ( SELECT row_.*, rownum rownum_ FROM (select intid,strusername,intuserid,strcareername,dttime from hr_career where intclose=1 and intparentid =0) row_ WHERE rownum <= 20010) WHERE rownum_ > 20000


为什么显示的速度这么慢 要3-4秒

当数据量为10万的时候 显示速度则是很快 不知是什么原因造成的
nylwin 2007-01-31
  • 打赏
  • 举报
回复
生成的HQL语句;

Hibernate: select * from ( select row_.*, rownum rownum_ from ( select career0_.intID as col_0_0_, c
areer0_.intUserId as col_1_0_, career0_.strCareername as col_2_0_, career0_.dtTIME as col_3_0_, care
er0_.intCareerId as col_4_0_, career0_.CareerType as col_5_0_, career0_.CareerSalary as col_6_0_, ca
reer0_.CareerExpire as col_7_0_, career0_.strSheng as col_8_0_, career0_.strCity as col_9_0_, career
0_.strCompany as col_10_0_, career0_.intCheck as col_11_0_ from hr_career career0_ where career0_.in
tClose=1 and career0_.intParentId=0 order by career0_.intID desc ) row_ where rownum <= ?) where row
num_ > ?

大家看看有没有什么问题?
nylwin 2007-01-31
  • 打赏
  • 举报
回复
我测试的表字段ID是自增的 是主键 所以在索引不能做文章了 不知道除了数据拆分 还有没有更好的办法?
laoer 2007-01-31
  • 打赏
  • 举报
回复
Hibernate的分页查询SQL已经是最优了,这个我做过测试的,对于大容量数据,一方面要建好索引,还有就是单表有必要存放这么多的数据吗?是不是可以考虑将数据拆分出来。
kill8108 2007-01-31
  • 打赏
  • 举报
回复
我想你用HIBERNATE来做分页优化不到那里了吧......
我帮你顶下了......

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧