Oracle 先排序在分页问题

wx_1021 2017-08-10 09:02:42

select * from (
select ROWNUM RN,a.type,a.objid,a.xm from table1 a
order by type desc
) where RN between 0 and 20

我的type列中有两种值,一种是0,一种是1,我要让1的数据显示在表格的最上面,所以desc倒排序了一下,不仅效率慢,而且这种排序只能翻到第二页,也就是 20 - 40 这种,第三页往后都是第二页的数据,除了RN列在变以外;
数据表里的数据就10多万
...全文
287 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
卖水果的net 2017-08-11
  • 打赏
  • 举报
回复
type 只有两个值的情况下,对他排序,得到的结果是不稳定的,建议增加其他列,比如主键列。
吉普赛的歌 2017-08-10
  • 打赏
  • 举报
回复
SELECT *
FROM   (
           SELECT a.*,
                  rownum     rn
           FROM   (
                      SELECT a.type,
                             a.objid,
                             a.xm
                      FROM   table1 a
                      ORDER BY
                             TYPE DESC
                  )          a
       ) b
WHERE  b.rn BETWEEN 1 AND 20;
这样可以保证分页是正常的。 至于分页效率就不好弄了, 你这个 type 只有两种状态, 即使建立一般的索引也没有用, 排序之后很难快起来。 不过, 你可以试一下让 type 作为聚集索引, 看效率能不能提高。
二月十六 2017-08-10
  • 打赏
  • 举报
回复
oracle不太熟,这样可以实现楼主的需求吗?
SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY type DESC ) RN ,
                    a.type ,
                    a.objid ,
                    a.xm
          FROM      table1 a
        ) t
WHERE   RN BETWEEN 0 AND 20;

27,579

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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