1. 根据 ROWID 来分
SELECT * FROM t_xiaoxi WHERE rowid IN(
SELECT rid FROM (
SELECT rownum rn,rid FROM(
SELECT rowid rid,cid FROM t_xiaoxi ORDER BY cid DESC
) WHERE rownum<10000
) WHERE rn>9980
) ORDER BY cid DESC;
执行时间0.03秒
2.按分析函数来分
select * from (
select t.*,row_number() over(order by cid desc) rk from t_xiaoxi t
) where rk<10000 and rk>9980;
执行时间1.01秒
3.按ROWNUM来分
select * from(
select t.*,rownum rn from(select * from t_xiaoxi order by cid desc) t where rownum<10000
) where rn>9980;
执行时间0.1秒
其中t_xiaoxi为表名称,cid为表的关键字段,取按CID降序排序后的第9981-9999条记录,t_xiaoxi表有70000多条记录
个人感觉1的效率最好,3次之,2最差
SELECT *
FROM (SELECT a.*,
rownum rn
FROM (SELECT *
FROM oc a
ORDER BY k001) a
WHERE ROWNUM <= 20)
WHERE rn >= 10 AND rn < 20;
--此处之所以在外面包了一层,是因为 ROWNUM不能像rn一样加条件,只有用里面 SQL检索出的结果集才能分页
SELECT b.*
FROM (SELECT *
FROM (SELECT a.*,
rownum rn
FROM (SELECT ROWID rid,
status
FROM product a
WHERE company_id = ?
ORDER BY status) a
WHERE rownum <= 20)
WHERE rn > 10 ) a,
product b
WHERE a.rid = b.rowid;
--用rowid的方式分页效率比单纯用 rownum的效率要高
另外加一条:
Oracle中复制一张表
create table table_name as ( select * from table )