数据库分页大全(oracle利用解析函数row-凯发k8国际

`
qepwqnp
  • 浏览: 102715 次
  • 性别:
  • 来自: 成都
最近访客
博主相关
  • 博客
  • 微博
  • 相册
  • 收藏
  • 社区版块
    • ( 0)
    • ( 65)
    • ( 47)
    存档分类
    最新评论

    数据库分页大全(oracle利用解析函数row_number高效分页)

    数据库分页大全(oracle利用解析函数row_number高效分页)

     

    mysql分页采用limt关键字

    select * from t_order limit 5,10; #返回第6-15行数据
    select
     * from  t_order limit  5; #返回前5
    select
     * from  t_order limit 0,5; #返回前5

    mssql 2000分页采用top关键字(20005以上版本也支持关键字rownum)

    select top 10 * from t_order where id not in (select id from t_order where id>5 ); //返回第615行数据

    其中10表示取10记录 5表示从第5条记录开始取

    oracle分页

    采用rownum关键字(三层嵌套)

    select * from(
      select a.*,rownum  num from
      (select * from t_order)a
      where
      rownum<=
    15)
    where num>=
    5;--返回第5-15行数据

    采用row_number解析函数进行分页(效率更高)

    select xx.* from(
    select t.*,row_number() over(order by o_id)as num
    from t_order t
    )xx
    where num between
    5 and 15;

    --返回第5-15行数据

    解析函数能用格式

    函数() over(pertion by 字段 order by 字段);

    pertion 按照某个字段分区

    order 按照勒个字段排序

    分享到:
    |
    评论
    15 楼 sp42 2016-04-30  
    oracle 不是很吊的么,怎么连个分页都这么麻烦?
    14 楼 metarnetyflu 2014-10-16  
    不知道哪里快了!!!over()是最慢的,rownum其次,rowid最快!
    13 楼 wfd0807 2014-09-29  
    09年发的博文,五年了,一定影响到了不少人。
    首先,你描述的三层嵌套就比oracle官方介绍中少了一个关键信息,这个信息在大部分数据库系统的分页查询中都是必须的,那就是原始结果集排序,而且排序的条件很苛刻,就是排序列的组合必须唯一,否则有很大的可能出现分页查询的错误,即相邻页出现相同的记录,同时有部分记录在所有页面都不显示的问题。单表查询、小数据量查询的时候,很少会出现,当多表、大数据量查询的时候,不排序分页就会出问题。
    另外,用分析函数分页是效率是最低的,我不知道博主怎么说效率高的?随便比较一下执行计划,就发现两者在效率方面没有可比性。看不懂执行计划的,用三万条记录实验一下,比较一下两者的查询消耗的时间,明显会发现分析函数耗费时间多。
    rownum是伪列,row_number()是分析函数,无论从实现方式,还是作用目的,在分页上后者都不可能比前者效率高!
    后来者,慎重参考!
    12 楼 2009-12-22  
    ①select * from(
      select a.field_id,rownum  num from
      (select * from recordtable order by field_id) a
      where
      rownum<=1550)
    where num>=5
    num是有序的5~1550
    ②select * from
    (select t.field_id,rownum num from recordtable t where rownum<=1550 order by field_id)
    where num>=5
    num是无序的,乱的
    但是②比①的速度要快的多!
    11 楼 2009-12-18  
    如果没有排序,两层也是可以的
    但一有排序,两层是不对地,需要再加一层
    你可以试试

    zfc827 写道
    蔡华江 写道
    cnlinkin 写道
    用rownum两层就可以了呀?
    select * from
    (select t.*,rownum r from mytable t where rownum<=10)
    where r>=5

    你确定两层没有问题?


    有什么问题?

    10 楼 2009-11-26  
    蔡华江 写道
    cnlinkin 写道
    用rownum两层就可以了呀?
    select * from
    (select t.*,rownum r from mytable t where rownum<=10)
    where r>=5

    你确定两层没有问题?


    有什么问题?
    9 楼 2009-11-21  
    经测试发现:采用rownum方式进行分页,越后面越慢,不知道为什么,对于几千万的数据定位到最后的100条数据,受不了
    8 楼 2009-11-20  
    不错,mysql最方便
    7 楼 2009-11-19  
    cnlinkin 写道
    用rownum两层就可以了呀?
    select * from
    (select t.*,rownum r from mytable t where rownum<=10)
    where r>=5

    你确定两层没有问题?
    6 楼 2009-11-19  
    事实证明:
    select * from
    (select t.*,rownum r from mytable t where rownum<=15)
    where r>=5
    效率最高
    5 楼 2009-11-14  
    用rownum两层就可以了呀?
    select * from
    (select t.*,rownum r from mytable t where rownum<=10)
    where r>=5
    4 楼 2009-11-14  
    qepwqnp 写道


    数据库分页大全(oracle利用解析函数row_number高效分页)


     


    mysql分页采用limt关键字


    select * from t_order limit 5,10; #返回第6-15行数据
    select
     * from  t_order limit  5; #返回前5
    select
     * from  t_order limit 0,5; #返回前5


    mssql 2000分页采用top关键字(20005以上版本也支持关键字rownum)


    select top 10 * from t_order where id not in (select id from t_order where id>5 ); //返回第615行数据


    其中10表示取10记录 5表示从第5条记录开始取


    oracle分页


    采用rownum关键字(三层嵌套)


    select * from(
      select a.*,rownum  num from
      (select * from t_order)a
      where
      rownum<=
    15)
    where num>=
    5;--返回第5-15行数据


    采用row_number解析函数进行分页(效率更高)


    select xx.* from(
    select t.*,row_number() over(order by o_id)as num
    from t_order t
    )xx
    where num between
    5 and 15;


    --返回第5-15行数据


    解析函数能用格式


    函数() over(pertion by 字段 order by 字段);


    pertion 按照某个字段分区


    order 按照勒个字段排序



    经过对单表2134043w数据进行测试发现row_number分布耗时15s,而采用rownum仅0.0062s

     

    3 楼 2009-09-06  
    sql server 2000的top分页 id必须有唯一性约束
    2 楼 2009-09-06  
    分页方面,还是mysql方便,sqlserver呢,也比较麻烦,尤其是要进行排序时,也要很长的sql。oracle确实真的麻烦。记得上次,查询一次,写了三个嵌套的select,还用到集合的操作,麻烦。直接在程序中,用hibernate的那几个方法,就会存在效率问题。分页确实是个大问题。
    1 楼 2009-09-03  
    楼主 比较辛苦哦 我今天笔试的时候 就记错了 把mysql的分页写在oracle上面了 简直是 日笨啊

    相关推荐

      分页存储过程,仅适用于sql2005以上,使用 row_number()函数用于多表分页查询,可以分组查询

      sql row_number()分页比较

      简单又实用的 存储过程分页 真正的实现分页技术 可不是一锅端的分页 用存储过程实现的 好用到 2005 新特性row_number() 这个函数

      row_number() over函数 数据库存储过程分页 自动添加字段加编号

      oracle row_number() over()解析函数高效实现分页,需要的朋友可以参考下。

      利用sql 2005中的row_number() 进行数据分页

      通用存储过程分页(使用row_number()和不使用row_number()两种情况)性能分析

      采用另外一种方式来进行分页。。rownumber方式或许更快,方式更好点

      主要介绍了sqlserver分页查询关于使用top方式和row_number()解析函数的不同的相关资料,需要的朋友可以参考下

      设置sqlserver使用row_number时不排序 –1.看到nhibernate是这样写的分页,感觉写起来比较容易理解(应该不会有效率问题吧?) –with只是定一个别名? [sql] with query as (select row_number() over(order by ...

      oracle数据库利用解析函数高效实现分页,

      c#拼接sql语句,sql server 2005 ,多行多列大数据量情况下,使用row_number实现的高效分页排序

      本篇文章是对数据库分页的两种方法对比(row_number()over()和top的对比)进行了详细的分析介绍,需要的朋友参考下

      sql server 2005中row_number()函数在存储过程分页中的应用.pdf

      数据库分页数据库分页数据库分页数据库分页数据库分页

      代码如下: create procedure p_news @pagesize int,@pageindex int as begin select * from( select *,row_number() over(order by id) as [$row_num] from news –where [$row_num]<=3 这个时候行号不能用,必须...

      sql2005利用row_number() over实现分页功能,需要的朋友可以参考下

      jsp jdbc_真分页(基于oracle数据库分页)笔记jsp jdbc_真分页(基于oracle数据库分页)笔记jsp jdbc_真分页(基于oracle数据库分页)笔记

    global site tag (gtag.js) - google analytics
    网站地图