论坛首页 Java企业应用论坛

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

浏览 23474 次
精华帖 (0) :: 良好帖 (3) :: 新手帖 (7) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-05-24  
DAO

数据库分页大全(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 按照勒个字段排序

   发表时间:2009-09-03  
楼主 比较辛苦哦 我今天笔试的时候 就记错了 把mysql的分页写在Oracle上面了 简直是 日笨啊
0 请登录后投票
   发表时间:2009-09-06  
分页方面,还是mysql方便,sqlserver呢,也比较麻烦,尤其是要进行排序时,也要很长的sql。oracle确实真的麻烦。记得上次,查询一次,写了三个嵌套的select,还用到集合的操作,麻烦。直接在程序中,用hibernate的那几个方法,就会存在效率问题。分页确实是个大问题。
0 请登录后投票
   发表时间:2009-09-06  
SQL Server 2000的Top分页 id必须有唯一性约束
0 请登录后投票
   发表时间: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

 

0 请登录后投票
   发表时间:2009-11-14  
用rownum两层就可以了呀?
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5
0 请登录后投票
   发表时间:2009-11-19  
事实证明:
select * from
(select t.*,rownum r from mytable t where rownum<=15)
where r>=5
效率最高
0 请登录后投票
   发表时间:2009-11-19  
cnlinkin 写道
用rownum两层就可以了呀?
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5

你确定两层没有问题?
0 请登录后投票
   发表时间:2009-11-20  
不错,mysql最方便
0 请登录后投票
   发表时间:2009-11-21  
经测试发现:采用rownum方式进行分页,越后面越慢,不知道为什么,对于几千万的数据定位到最后的100条数据,受不了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics