- 浏览: 115175 次
- 性别:
- 来自: 成都
最新评论
-
sp42:
Oracle 不是很吊的么,怎么连个分页都这么麻烦?
数据库分页大全(oracle利用解析函数row_number高效分页) -
metarnetyflu:
不知道哪里快了!!!over()是最慢的,rownum其次,r ...
数据库分页大全(oracle利用解析函数row_number高效分页) -
wfd0807:
09年发的博文,五年了,一定影响到了不少人。首先,你描述的三层 ...
数据库分页大全(oracle利用解析函数row_number高效分页) -
diyunpeng:
学习了,写的不错。
python urlOpen使用代理 -
qepwqnp:
帖子沉的好深,涝起来
js_自己封装一个可查询frame中对象的一个方法
数据库分页大全(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 ); //返回第6到15行数据
其中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()是分析函数,无论从实现方式,还是作用目的,在分页上后者都不可能比前者效率高!
后来者,慎重参考!
首先,你描述的三层嵌套就比oracle官方介绍中少了一个关键信息,这个信息在大部分数据库系统的分页查询中都是必须的,那就是原始结果集排序,而且排序的条件很苛刻,就是排序列的组合必须唯一,否则有很大的可能出现分页查询的错误,即相邻页出现相同的记录,同时有部分记录在所有页面都不显示的问题。单表查询、小数据量查询的时候,很少会出现,当多表、大数据量查询的时候,不排序分页就会出问题。
另外,用分析函数分页是效率是最低的,我不知道博主怎么说效率高的?随便比较一下执行计划,就发现两者在效率方面没有可比性。看不懂执行计划的,用三万条记录实验一下,比较一下两者的查询消耗的时间,明显会发现分析函数耗费时间多。
rownum是伪列,row_Number()是分析函数,无论从实现方式,还是作用目的,在分页上后者都不可能比前者效率高!
后来者,慎重参考!
12 楼
641216927
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是无序的,乱的
但是②比①的速度要快的多!
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 楼
rabbitbug
2009-12-18
如果没有排序,两层也是可以的
但一有排序,两层是不对地,需要再加一层
你可以试试
你确定两层没有问题?
有什么问题?
但一有排序,两层是不对地,需要再加一层
你可以试试
zfc827 写道
蔡华江 写道
cnlinkin 写道
用rownum两层就可以了呀?
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5
你确定两层没有问题?
有什么问题?
10 楼
zfc827
2009-11-26
蔡华江 写道
cnlinkin 写道
用rownum两层就可以了呀?
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5
你确定两层没有问题?
有什么问题?
9 楼
czllfy
2009-11-21
经测试发现:采用rownum方式进行分页,越后面越慢,不知道为什么,对于几千万的数据定位到最后的100条数据,受不了
8 楼
mydu
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
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5
你确定两层没有问题?
6 楼
hhxlyl
2009-11-19
事实证明:
select * from
(select t.*,rownum r from mytable t where rownum<=15)
where r>=5
效率最高
select * from
(select t.*,rownum r from mytable t where rownum<=15)
where r>=5
效率最高
5 楼
cnlinkin
2009-11-14
用rownum两层就可以了呀?
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5
select * from
(select t.*,rownum r from mytable t where rownum<=10)
where r>=5
4 楼
czllfy
2009-11-14
<div class="quote_title">qepwqnp 写道</div>
<div class="quote_div">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>数据库分页大全(</span><span style="color: #000000;"><span style="font-family: Times New Roman;">oracle</span></span><span>利用解析函数</span><span style="color: #000000;"><span style="font-family: Times New Roman;">row_number</span></span><span>高效分页)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: #000000;"><span style="font-size: small; font-family: Times New Roman;"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #ff0000;"><span style="font-family: Times New Roman;">Mysql</span></span><span>分页采用</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">limt</span></span><span>关键字</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span lang="EN-US">select</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">*</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">from</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">t_order</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">limit</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">5,</span></strong><strong><span lang="EN-US">10</span></strong><strong><span lang="EN-US">;</span></strong><span style="font-family: Times New Roman;"><strong><span lang="EN-US"> </span></strong><span style="color: #000000;"><span style="font-size: small;">#</span></span></span><span style="font-size: small;"><span>返回第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">6-15</span></span><span>行数据</span><span style="color: #000000;"><span style="font-family: Times New Roman;"> </span></span></span><strong><span lang="EN-US"><br>select</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">*</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">from</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">t_order limit</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US"> 5</span></strong><strong><span lang="EN-US">;</span></strong><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;"> #</span></span><span>返回前</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5</span></span><span>行</span><span style="color: #000000;"><span style="font-family: Times New Roman;"> </span></span></span><strong><span lang="EN-US"><br>select</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">*</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">from</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">t_order limit</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US"> </span></strong><strong><span lang="EN-US">0,5</span></strong><strong><span lang="EN-US">;</span></strong><span style="font-family: Times New Roman;"><strong><span lang="EN-US"> </span></strong><span style="color: #000000;"><span style="font-size: small;">#</span></span></span><span style="font-size: small;"><span>返回前</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5</span></span><span>行</span><strong></strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #ff0000;"><span style="font-family: Times New Roman;">Mssql 2000</span></span><span>分页采用</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">top</span></span><span>关键字</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">(20005</span></span><span>以上版本也支持关键字</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">rownum)</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span lang="EN-US">Select top </span></strong><strong><span lang="EN-US">10</span></strong><strong><span lang="EN-US"> * from t_order where id not in (select id from t_order where id></span></strong><strong><span lang="EN-US">5</span></strong><strong><span lang="EN-US"> )</span></strong><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">; //</span></span><span>返回第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">6</span></span><span>到</span><span style="color: #000000;"><span style="font-family: Times New Roman;">15</span></span><span>行数据</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>其中</span><span style="color: #000000;"><span style="font-family: Times New Roman;">10</span></span><span>表示取</span><span style="color: #000000;"><span style="font-family: Times New Roman;">10</span></span><span>记录</span><span style="color: #000000;"><span style="font-family: Times New Roman;"> 5</span></span><span>表示从第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5</span></span><span>条记录开始取</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #ff0000;"><span style="font-family: Times New Roman;">Oracle</span></span><span>分页</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>①</span><span>采用</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">rownum</span></span><span>关键字</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">(</span></span><span>三层嵌套</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">)</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span lang="EN-US">SELECT</span></strong><span lang="EN-US"> * <strong>FROM</strong>(<br><span> </span><strong>SELECT</strong> A.*,<strong>ROWNUM</strong><span> </span>num <strong>FROM</strong> <br><span> </span>(<strong>SELECT</strong> * <strong>FROM</strong> t_order)A<br><span> </span><strong>WHERE</strong><br><span> </span><strong>ROWNUM</strong><=</span><span lang="EN-US">15</span><span lang="EN-US">)<br><strong>WHERE</strong> num>=</span><span lang="EN-US">5</span><span lang="EN-US">;<strong>-</strong></span><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">-</span></span><span>返回第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5-15</span></span><span>行数据</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>②</span><span>采用</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">row_number</span></span><span>解析函数进行分页</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">(</span></span><span>效率更高</span><span style="font-family: Times New Roman;"><span style="color: #ff0000;">)</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span lang="EN-US">SELECT</span></strong><span lang="EN-US"> xx.* <strong>FROM</strong>(<br><strong>SELECT</strong> t.*,row_number() over(<strong>ORDER</strong> <strong>BY</strong> o_id)<strong>AS</strong> num<br><strong>FROM</strong> t_order t<br>)xx<br><strong>WHERE</strong> num <strong>BETWEEN</strong> </span><span lang="EN-US">5</span><span lang="EN-US"> <strong>AND</strong> </span><span lang="EN-US">15</span><span lang="EN-US">;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">--</span></span><span>返回第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5-15</span></span><span>行数据</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>解析函数能用格式</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>函数</span><span style="color: #000000;"><span style="font-family: Times New Roman;">() over(pertion by </span></span><span>字段</span><span style="color: #000000;"><span style="font-family: Times New Roman;"> order by </span></span><span>字段</span><span style="color: #000000;"><span style="font-family: Times New Roman;">);</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">Pertion </span></span><span>按照某个字段分区</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">Order </span></span><span>按照勒个字段排序</span></span></p>
</div>
<div class="quote_div">经过对单表2134043W数据进行测试发现row_number分布耗时15S,而采用ROWNUM仅0.0062S</div>
<p> </p>
<div class="quote_div">
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>数据库分页大全(</span><span style="color: #000000;"><span style="font-family: Times New Roman;">oracle</span></span><span>利用解析函数</span><span style="color: #000000;"><span style="font-family: Times New Roman;">row_number</span></span><span>高效分页)</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="color: #000000;"><span style="font-size: small; font-family: Times New Roman;"> </span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #ff0000;"><span style="font-family: Times New Roman;">Mysql</span></span><span>分页采用</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">limt</span></span><span>关键字</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span lang="EN-US">select</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">*</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">from</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">t_order</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">limit</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">5,</span></strong><strong><span lang="EN-US">10</span></strong><strong><span lang="EN-US">;</span></strong><span style="font-family: Times New Roman;"><strong><span lang="EN-US"> </span></strong><span style="color: #000000;"><span style="font-size: small;">#</span></span></span><span style="font-size: small;"><span>返回第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">6-15</span></span><span>行数据</span><span style="color: #000000;"><span style="font-family: Times New Roman;"> </span></span></span><strong><span lang="EN-US"><br>select</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">*</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">from</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">t_order limit</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US"> 5</span></strong><strong><span lang="EN-US">;</span></strong><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;"> #</span></span><span>返回前</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5</span></span><span>行</span><span style="color: #000000;"><span style="font-family: Times New Roman;"> </span></span></span><strong><span lang="EN-US"><br>select</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">*</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">from</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US">t_order limit</span></strong><strong><span lang="EN-US"><span style="font-family: Times New Roman;"> </span></span></strong><strong><span lang="EN-US"> </span></strong><strong><span lang="EN-US">0,5</span></strong><strong><span lang="EN-US">;</span></strong><span style="font-family: Times New Roman;"><strong><span lang="EN-US"> </span></strong><span style="color: #000000;"><span style="font-size: small;">#</span></span></span><span style="font-size: small;"><span>返回前</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5</span></span><span>行</span><strong></strong></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #ff0000;"><span style="font-family: Times New Roman;">Mssql 2000</span></span><span>分页采用</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">top</span></span><span>关键字</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">(20005</span></span><span>以上版本也支持关键字</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">rownum)</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span lang="EN-US">Select top </span></strong><strong><span lang="EN-US">10</span></strong><strong><span lang="EN-US"> * from t_order where id not in (select id from t_order where id></span></strong><strong><span lang="EN-US">5</span></strong><strong><span lang="EN-US"> )</span></strong><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">; //</span></span><span>返回第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">6</span></span><span>到</span><span style="color: #000000;"><span style="font-family: Times New Roman;">15</span></span><span>行数据</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>其中</span><span style="color: #000000;"><span style="font-family: Times New Roman;">10</span></span><span>表示取</span><span style="color: #000000;"><span style="font-family: Times New Roman;">10</span></span><span>记录</span><span style="color: #000000;"><span style="font-family: Times New Roman;"> 5</span></span><span>表示从第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5</span></span><span>条记录开始取</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #ff0000;"><span style="font-family: Times New Roman;">Oracle</span></span><span>分页</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>①</span><span>采用</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">rownum</span></span><span>关键字</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">(</span></span><span>三层嵌套</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">)</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span lang="EN-US">SELECT</span></strong><span lang="EN-US"> * <strong>FROM</strong>(<br><span> </span><strong>SELECT</strong> A.*,<strong>ROWNUM</strong><span> </span>num <strong>FROM</strong> <br><span> </span>(<strong>SELECT</strong> * <strong>FROM</strong> t_order)A<br><span> </span><strong>WHERE</strong><br><span> </span><strong>ROWNUM</strong><=</span><span lang="EN-US">15</span><span lang="EN-US">)<br><strong>WHERE</strong> num>=</span><span lang="EN-US">5</span><span lang="EN-US">;<strong>-</strong></span><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">-</span></span><span>返回第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5-15</span></span><span>行数据</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>②</span><span>采用</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">row_number</span></span><span>解析函数进行分页</span><span style="color: #ff0000;"><span style="font-family: Times New Roman;">(</span></span><span>效率更高</span><span style="font-family: Times New Roman;"><span style="color: #ff0000;">)</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><strong><span lang="EN-US">SELECT</span></strong><span lang="EN-US"> xx.* <strong>FROM</strong>(<br><strong>SELECT</strong> t.*,row_number() over(<strong>ORDER</strong> <strong>BY</strong> o_id)<strong>AS</strong> num<br><strong>FROM</strong> t_order t<br>)xx<br><strong>WHERE</strong> num <strong>BETWEEN</strong> </span><span lang="EN-US">5</span><span lang="EN-US"> <strong>AND</strong> </span><span lang="EN-US">15</span><span lang="EN-US">;</span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">--</span></span><span>返回第</span><span style="color: #000000;"><span style="font-family: Times New Roman;">5-15</span></span><span>行数据</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>解析函数能用格式</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span>函数</span><span style="color: #000000;"><span style="font-family: Times New Roman;">() over(pertion by </span></span><span>字段</span><span style="color: #000000;"><span style="font-family: Times New Roman;"> order by </span></span><span>字段</span><span style="color: #000000;"><span style="font-family: Times New Roman;">);</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">Pertion </span></span><span>按照某个字段分区</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="color: #000000;"><span style="font-family: Times New Roman;">Order </span></span><span>按照勒个字段排序</span></span></p>
</div>
<div class="quote_div">经过对单表2134043W数据进行测试发现row_number分布耗时15S,而采用ROWNUM仅0.0062S</div>
<p> </p>
3 楼
ring09h
2009-09-06
SQL Server 2000的Top分页 id必须有唯一性约束
2 楼
leejon
2009-09-06
分页方面,还是mysql方便,sqlserver呢,也比较麻烦,尤其是要进行排序时,也要很长的sql。oracle确实真的麻烦。记得上次,查询一次,写了三个嵌套的select,还用到集合的操作,麻烦。直接在程序中,用hibernate的那几个方法,就会存在效率问题。分页确实是个大问题。
1 楼
json615
2009-09-03
楼主 比较辛苦哦 我今天笔试的时候 就记错了 把mysql的分页写在Oracle上面了 简直是 日笨啊
发表评论
-
字节顺序大端模式Big Endian
2023-12-22 16:57 1871大端模式和小端模式是描述多字节数据在存储时的字节顺序的两种方 ... -
mediawiki 如何开发特殊页面
2015-04-01 14:56 1095Mediawiki特殊页面开发步骤 1 页面显示名字设 ... -
mediawiki 实现ajax请求及demo
2015-04-01 14:36 970实现方案为使用mediawiki 的api。 1.前台 ... -
mediawiki1.24源码分析(一)
2015-04-01 14:31 0所有分析说明采用文字使用浅红色、小四号楷体。 Index ... -
Mysql ERROR 1040 (00000): Too many connections
2013-09-23 16:38 1662程序添加数据库数据:错误信息: com.mysql. ... -
解决AJAX传输到后台时中文乱码问题
2011-09-14 08:49 1787var urlPaging = "中间信息&qu ... -
Webservices手写客户端调用
2011-08-11 14:08 1311客户端调用 // 实例化IS ... -
python文章采集例子(爬取http://infoq.com)
2011-06-24 23:41 3637写了个采集http://infoq.com资源的小程序,原理: ... -
一键搞定python连接mysql驱动问题(windows版本)
2011-06-21 17:49 2369对于mysql驱动问题折腾了一下午,现共享出解决方案 1:手动 ... -
python爬虫抓站技巧
2011-06-19 20:20 2254本文章部分内容为转载----- 本人学习python中,用得最 ... -
python urlOpen使用代理
2011-06-17 17:42 9770利用urllib包 import urllib prox ... -
TypeError: 'str' object is not callable
2011-06-17 14:25 8532weburl = 'xyz' print " ... -
Eclipse 如何本地进行远程调试
2011-06-16 11:42 2009步骤:(无法上传图片) 1 确保TOMCAT在DEBUG模 ... -
js_自己封装一个可查询frame中对象的一个方法
2011-01-20 16:34 1360说明 用途: 查询当前页面以及所包含的frame中id为传入 ... -
在Eclipse中启动tomcat,并指定启动目录
2011-01-11 16:44 1471我们会有这样的需求:为了工程结构统层次清晰,在开发时不将工程定 ... -
ORACLE VARCHAR 排序问题
2010-06-24 16:31 4045为了实现varchar型的字段序号递增,我每次插入数据要先找出 ... -
SQL 连接 JOIN 例解。(左连接,右连接,全连接,内连接,交叉连接,自连接)
2009-09-09 22:11 1544SQL 连接 JOIN 例解。( ... -
利用properties资源文件追加写入,而不覆盖
2009-08-14 09:11 4908利用properties资源文件追加写入,而不覆盖 Prop ... -
Spring+AspectJ采用注释做申明式事务(手工山寨版)
2009-06-07 10:56 1069建立表 DROP TABLE t_book; CRE ... -
jdbc优化[手工原创]
2009-04-16 21:26 1272java 与oracle数据库效率优化 @java 方面 ...
相关推荐
Oracle的分析函数`ROW_NUMBER() OVER()`是一种强大的工具,用于在查询结果集中为每一行分配一个唯一的序列号。这个函数通常用于数据分页、排名或者为特定条件的记录分配顺序。下面我们将详细讨论`ROW_NUMBER() OVER...
Oracle 支持多种分页方式,包括三层嵌套分页、ROW_NUMBER() 函数分页及 ROWNUM 控制最大条数的方法。 1. **三层嵌套分页**: ```sql SELECT * FROM ( SELECT row_.*, ROWNUM as rownum FROM ( SELECT sid ...
本文将详细介绍如何利用Oracle中的`ROW_NUMBER()`解析函数来实现高效的分页功能,并通过示例对比不同分页方法的优劣。 #### 传统分页方法的问题 1. **ROWNUM方法**: - **原理**:通过`ROWNUM`为结果集中的每一行...
Oracle数据库中的`row_number() over()`函数是一种窗口函数,它在处理数据分页时非常有用。这个函数可以为查询结果集中的每一行分配一个唯一的行号,这些行号基于一个指定的排序规则。在此场景中,我们将探讨如何...
Oracle数据库中的`row_number() over()`分析函数是一个非常实用的工具,用于为数据集中的每一行分配一个唯一的整数,这个数字基于指定的排序条件。在处理大数据集时,它可以帮助我们进行分页、排名或者在复杂的查询...
在Oracle数据库中,`ROWNUM` 和 `ROW_NUMBER()` 是两个不同的概念,它们在处理结果集的排序和分页方面有着显著的区别。 首先,`ROWNUM` 是Oracle数据库中的一个伪列,它在查询执行的过程中动态生成。当查询执行时,...
本篇文章将详细介绍如何在不同的数据库系统中实现分页,包括JAVA、JSP环境下的数据库分页实现,以及Oracle、SQL Server、MySQL、DB2等数据库的分页查询方法。 在Java和JSP中,分页通常涉及到后端服务器和前端页面的...
高效分页在Oracle数据库中是通过利用如`ROW_NUMBER()`这样的窗口函数或`ROWNUM`伪列来实现的。为了更好地管理大型数据集的查询,开发者应熟悉这些技术,并根据具体需求选择最合适的方案。此外,封装分页逻辑到存储...
从Oracle 11g开始,还可以利用`ROW_NUMBER()`窗口函数来进行更灵活的分页: ```sql 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;...
- 在 SQL Server 中,ROW_NUMBER() 函数与 Oracle 中的 ROWNUM 功能类似,但它们之间存在一些关键差异。 - **ROW_NUMBER()** 可以基于特定的排序规则为每行分配一个连续的数字,这使得它在处理有序数据时更为灵活...
总之,`ROW_NUMBER()`函数在SQL Server中是实现高效分页查询的重要工具。通过正确地设置参数和理解其工作原理,可以轻松地在大量数据中实现分页浏览,提高用户体验。同时,要注意不同数据库系统可能存在的语法差异,...
自Oracle 10g开始,ROW_NUMBER()窗口函数提供了更灵活的分页方式。它可以为每个分组或分区分配一个唯一的行号,这使得在分页时可以对特定列进行排序。以下是一个示例: ```sql CREATE OR REPLACE PROCEDURE get_...
Oracle数据库提供了两种主要的分页方法:ROWNUM和ROW_NUMBER()函数,以及Oracle 12c及更高版本引入的FETCH NEXT ... ROWS ONLY语法。 1. ROWNUM方法:这是Oracle较早的分页方式。ROWNUM是在结果集生成时就赋值的一...
另一种更高效的方法是使用Oracle的`ROW_NUMBER()`函数,配合`OVER()`子句,这样可以实现更复杂的分页逻辑。比如,如果我们要查询第5页的数据,每页20条,可以这样写: ```sql SELECT * FROM ( SELECT ROW_NUMBER()...
为了解决这个问题,Oracle 10g引入了新的功能:ROW_NUMBER()函数,配合子查询和WITH子句(即CTE,公共表表达式)可以实现更高效的分页: ```sql WITH ordered_data AS ( SELECT t.*, ROW_NUMBER() OVER (ORDER BY ...
select *, rownumber() over (order by some_column) as ROW_NEXT from tablename ) where ROW_NEXT between min and max; ``` 除了以上介绍的基本方法,还有一些其他的优化策略,如使用`CTE(公共表表达式)`...
在Oracle 12c及更高版本中,可以使用窗口函数ROW_NUMBER()实现更灵活的分页,尤其是在需要对结果集排序时更为方便。以下是一个使用ROW_NUMBER()的存储过程示例: ```sql CREATE OR REPLACE PROCEDURE get_paged_...
DB2的分页语句使用ROW_NUMBER()函数,语法为: ```sql SELECT * FROM (SELECT ROW_NUMBER() OVER (ORDER BY ID DESC) AS a, t.* FROM TEST2 t) b WHERE b.a BETWEEN (x-1)*y+1 AND (x-1)*y+y; ``` 其中,x指定页数,...
Oracle 12c引入了窗口函数ROW_NUMBER(),可以更优雅地实现分页。例如: ```sql WITH data AS ( SELECT *, ROW_NUMBER() OVER (ORDER BY some_column) row_num FROM your_table ) SELECT * FROM data WHERE row_...
为了解决这个问题,Oracle引入了RANK(), DENSE_RANK()和ROW_NUMBER()等分析函数,它们可以在排序后分配行号,从而实现分页。例如,使用ROW_NUMBER(): ```sql SELECT * FROM ( SELECT t.*, ROW_NUMBER() OVER ...