海量数据分页(高手进,分不够加!!)

sparkcn 2006-09-11 04:15:19
小弟,最近在用oracle 做分页,使用
======================================

SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
================================
目前数据库中有千万数据,此语句随着页数的增加越来越慢,点击"尾页"时,要等很长时间,请高手告知解决办法!!!
...全文
531 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
rogerfhl 2006-09-16
  • 打赏
  • 举报
回复
JF~~~~~
sten 2006-09-16
  • 打赏
  • 举报
回复
关注
hp19 2006-09-15
  • 打赏
  • 举报
回复
楼主试一下这个吧:

db.executeQuery("select * from (select * from (select rownum record_id,a.* from 表名 a) b ) c where rownum <= "+rowsPerPage+" and c.record_id > "+(curPage-1)*rowsPerPage);
sparkcn 2006-09-14
  • 打赏
  • 举报
回复
感谢各位回帖,我也知道1000多w的数据分页不是很合理,我们做的是一般的mis系统,一开始也没有想到,客户会有这么多的数据,所以在开发的时候,就才用了传统的交互界面,有"上页","下页","尾页"什么的,可是最近客户不知道那个筋不对,一下弄了这么多的数据,现在有些不止所错,我也和客户沟通过,他们也认可我的思路,就是把"尾页"去了,可是这样又要改我们的程序,总觉得心有不干,难道oracle连1000w的数据都高不定?,不知道银行了,什么的他们系统怎么做的,感谢各位,我在等等,过两天结贴!
「已注销」 2006-09-12
  • 打赏
  • 举报
回复
to feng2:
1.rownum 不能用between,只能用<
2.楼主方法是对的。
feng2 2006-09-12
  • 打赏
  • 举报
回复
1、尽量不要查询所有的列;
select col1,col2,col3,... from tablename
2、别做那么多嵌套;
select col1,col2,col3,... from tablename where rownum between 20 and 41;
3、管理好索引。
「已注销」 2006-09-12
  • 打赏
  • 举报
回复
关注...
sparkcn 2006-09-12
  • 打赏
  • 举报
回复
如果放入中间表的话,
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ...”
查出的记录也很多怎么办?

比如 如果查出100w条,是不是同样每次next都会同样慢??

还有好像如果查出的结果少于10w的话,即使点击“last”
也不会很慢,

lwk_hlj 2006-09-12
  • 打赏
  • 举报
回复
PS,查询条件是很重要的!
lwk_hlj 2006-09-12
  • 打赏
  • 举报
回复
1000多W的数据,我想,除非是SB,没有人会看那么多的数据去吧!
LinZhongBao 2006-09-12
  • 打赏
  • 举报
回复
关注...


macd004 2006-09-12
  • 打赏
  • 举报
回复
楼主买本《oralce数据库性能优化》的书,里面有针对web分页的优化
nowait 2006-09-12
  • 打赏
  • 举报
回复
一般来说子查询返回rowid的方式要更快一些。基本框架如下:
select a.* from table_name a
where rowid in (
select rid from (
select rowid as rid,rownum as rn from table_name
where ...
and rownum<&ceil_number)
where rn>&floor_number);


mu_gua 2006-09-12
  • 打赏
  • 举报
回复
看看Google的分页,Google做不到的楼主就省省心吧
mu_gua 2006-09-12
  • 打赏
  • 举报
回复
请问楼主:查出10w条以上的分页需求是否合理?
wiler 2006-09-11
  • 打赏
  • 举报
回复
每次点“next”都要查一次当然慢
可以考虑先把“
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ...”
的结果放进一个中间表
以后都对这个表操作就会快很多

17,382

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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