注册
达梦的4种分页方式
专栏/培训园地/ 文章详情 /

达梦的4种分页方式

哈哈哈,包子 2024/08/22 1033 3 0
摘要

参加达梦DCP培训的时候一道理论题是关于达梦数据库支持几种分页,下来整理了一下达梦支持的4种分页方式

准备测试数据

--创建学生表,id、姓名、年龄、成绩
CREATE TABLE STU(id INT ,name varchar2(20),age int,score int);
--插入1000条数据,id递增,姓名DAMENG1递增,年龄是13到17之前的随机数,成绩是60到100之前的随机数
INSERT INTO STU SELECT LEVEL id,'DAMENG'||level name,round(FLOOR(13 + (RAND() * 5))) age,
round(FLOOR(60 + (RAND() * 41))) score
FROM DUAL CONNECT BY LEVEL<=1000;
commit;

第一种 TOP 分页

SELECT TOP 300,10 * FROM STU;

第二种 LIMIT

SELECT * FROM STU LIMIT 300,10;

第三种 FETCH NEXT

SELECT * FROM STU OFFSET 300 ROWS FETCH NEXT 10 ROWS ONLY;

第四种 ROWNUM

SELECT * FROM (SELECT ROWNUM RN,* FROM STU) WHERE RN>=300 AND RN<=310;

几种分页方式的效率差别

EXPLAIN SELECT TOP 300,10 * FROM STU;
图片.png
EXPLAIN SELECT * FROM STU LIMIT 300,10;
图片.png
EXPLAIN SELECT * FROM STU OFFSET 300 ROWS FETCH NEXT 10 ROWS ONLY;
图片.png
EXPLAIN SELECT * FROM (SELECT ROWNUM RN,* FROM STU) WHERE RN>=300 AND RN<=310;
图片.png

通过以上查询计划可以看出来,前三种分页方式执行计划是一模一样的,而最后一种分页方式相较于前三种分页的执行计划来说,多了一个ROWNUM STOP KEY和PROJECT OPERATION的操作,所以我们在分页的时候应该优先选择前三种分页方式。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服