怎么解决rownum 分页数据越大就越慢的问题?

时间:2021-01-17 20:10:32
select *
  from (select row_. *, rownum rownum_
          from () row_ where rownum<=1000020)
                        where rownum_>=1000000

7 个解决方案

#1


常用的分页方式就这几种,自己测试下哪个快一点吧
1.根据ROWID来分
select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from
t_xiaoxi  order by cid desc) where rownum<10000) where rn>9980) order by cid desc;
2.按分析函数来分
select * from (select t.*,row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980;
3.按ROWNUM来分
select * from(select t.*,rownum rn from(select * from t_xiaoxi order by cid desc) t where rownum<10000) where
rn>9980;

#2


row_number 分页,相对 top 100 ... where not in ( top 200) 来说,性能上各有所长,不过对于页数越大这种情况,前者比后者要好。

随便问一下LZ , 你的数据量大概是多少 ?

#3


引用 2 楼 wmxcn2000 的回复:
row_number 分页,相对 top 100 ... where not in ( top 200) 来说,性能上各有所长,不过对于页数越大这种情况,前者比后者要好。

随便问一下LZ , 你的数据量大概是多少 ?


错了,打开的窗口太多了,没看清是  ORACLE 的。

#4


SQL Server 的也是  用row_number  over 的话 也是页面越大 速度越慢 有什么好的解决方法没??

#5


引用 2 楼 wmxcn2000 的回复:
row_number 分页,相对 top 100 ... where not in ( top 200) 来说,性能上各有所长,不过对于页数越大这种情况,前者比后者要好。

随便问一下LZ , 你的数据量大概是多少 ?


2000万吧  最后一页直接就打不开

#6


引用 5 楼 copy187 的回复:
Quote: 引用 2 楼 wmxcn2000 的回复:

row_number 分页,相对 top 100 ... where not in ( top 200) 来说,性能上各有所长,不过对于页数越大这种情况,前者比后者要好。
随便问一下LZ , 你的数据量大概是多少 ?

2000万吧  最后一页直接就打不开

你的数据是否是按序插入的,看看你的业务逻辑,是否能增加排序字段
采用从1开始的不间断数字,查看的时候,现根据当前最大的排序序号,
计算出页码需要显示的范围,然后进行查询显示

#7


该回复于2014-12-17 10:53:03被管理员删除

#1


常用的分页方式就这几种,自己测试下哪个快一点吧
1.根据ROWID来分
select * from t_xiaoxi where rowid in(select rid from (select rownum rn,rid from(select rowid rid,cid from
t_xiaoxi  order by cid desc) where rownum<10000) where rn>9980) order by cid desc;
2.按分析函数来分
select * from (select t.*,row_number() over(order by cid desc) rk from t_xiaoxi t) where rk<10000 and rk>9980;
3.按ROWNUM来分
select * from(select t.*,rownum rn from(select * from t_xiaoxi order by cid desc) t where rownum<10000) where
rn>9980;

#2


row_number 分页,相对 top 100 ... where not in ( top 200) 来说,性能上各有所长,不过对于页数越大这种情况,前者比后者要好。

随便问一下LZ , 你的数据量大概是多少 ?

#3


引用 2 楼 wmxcn2000 的回复:
row_number 分页,相对 top 100 ... where not in ( top 200) 来说,性能上各有所长,不过对于页数越大这种情况,前者比后者要好。

随便问一下LZ , 你的数据量大概是多少 ?


错了,打开的窗口太多了,没看清是  ORACLE 的。

#4


SQL Server 的也是  用row_number  over 的话 也是页面越大 速度越慢 有什么好的解决方法没??

#5


引用 2 楼 wmxcn2000 的回复:
row_number 分页,相对 top 100 ... where not in ( top 200) 来说,性能上各有所长,不过对于页数越大这种情况,前者比后者要好。

随便问一下LZ , 你的数据量大概是多少 ?


2000万吧  最后一页直接就打不开

#6


引用 5 楼 copy187 的回复:
Quote: 引用 2 楼 wmxcn2000 的回复:

row_number 分页,相对 top 100 ... where not in ( top 200) 来说,性能上各有所长,不过对于页数越大这种情况,前者比后者要好。
随便问一下LZ , 你的数据量大概是多少 ?

2000万吧  最后一页直接就打不开

你的数据是否是按序插入的,看看你的业务逻辑,是否能增加排序字段
采用从1开始的不间断数字,查看的时候,现根据当前最大的排序序号,
计算出页码需要显示的范围,然后进行查询显示

#7


该回复于2014-12-17 10:53:03被管理员删除