我有sql,需要分页之后按照status排序,我写的比较标准的sql应该是:
select * from
(
select id,c1,c2,c3,starts from tb order by status
)a where rownum<=10 and rownum>=1由于我的tb表有上百万记录,这样一来的话,查询速度非常慢,需要31秒,因为第一次就是百万级别的记录的order by排序啦,所以非常慢,但是如果不这样写的话,就是不是按照status排序的分页显示啦,页面的数据显示就比较混乱了!该如何解决这个问题呢?
select * from
(
select id,c1,c2,c3,starts from tb order by status
)a where rownum<=10 and rownum>=1由于我的tb表有上百万记录,这样一来的话,查询速度非常慢,需要31秒,因为第一次就是百万级别的记录的order by排序啦,所以非常慢,但是如果不这样写的话,就是不是按照status排序的分页显示啦,页面的数据显示就比较混乱了!该如何解决这个问题呢?
你第一页可以这么写
可第二页怎么办
where rownum>10 and rownum<=20是出不来结果的
select * from
(
select id,c1,c2,c3,starts,row_number()over(order by status)rn from tb
)a where rn>=1 and rn<=10
这个是可以的,跟你的row_number效果一样啊。
order by status这样放在内联视图,尽可能返回前面列
试试这样会不会好些
oracle 分页是不能直接写rownum>10之类的,应该是这样的
select * from
(
select id,c1,c2,c3,starts,row_number()over(order by status)rn from tb
)a where rn>=10 and rn <=20