oracle数据库分页总结

时间:2022-01-06 02:36:26
/*
BEGIN
CREATE TABLE APPUSER(IDS NUMBER(8),
USERNAME VARCHAR2(20),
PASSWORD VARCHAR2(20),
CTIME DATE); FOR S IN 1 .. 100000 LOOP
INSERT INTO APPUSER
VALUES
(S,
'username' || S,
'123456abc',
SYSDATE - DBMS_RANDOM.VALUE(300, 500));
END LOOP;
COMMIT;
END;
*/ --1.按分析函数来分(速度最慢)
SELECT *
FROM (SELECT T.*, ROW_NUMBER() OVER(ORDER BY IDS DESC) RK FROM APPUSER T)
WHERE RK <= 100000
AND RK > 99990;
--2.按ROWNUM来分
SELECT *
FROM (SELECT T.*, ROWNUM RN
FROM (SELECT * FROM APPUSER ORDER BY IDS DESC) T
WHERE ROWNUM <= 100000)
WHERE RN > 99990;
--3.根据ROWID来分(速度最快)
SELECT *
FROM APPUSER
WHERE ROWID IN
(SELECT RID
FROM (SELECT ROWNUM RN, RID
FROM (SELECT ROWID RID, IDS FROM APPUSER ORDER BY IDS DESC)
WHERE ROWNUM <= 100000)
WHERE RN > 99990)
ORDER BY IDS DESC;

针对100000条数据取最后一页的内容, 查询10次, 总结三种分页方式, 各自的效率,

第一种平均时间0.243s

第二种平均时间0.163s

第三种平均时间0.144s