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 )