参加达梦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;
SELECT TOP 300,10 * FROM STU;
SELECT * FROM STU LIMIT 300,10;
SELECT * FROM STU OFFSET 300 ROWS FETCH NEXT 10 ROWS ONLY;
SELECT * FROM (SELECT ROWNUM RN,* FROM STU) WHERE RN>=300 AND RN<=310;
EXPLAIN SELECT TOP 300,10 * FROM STU;
EXPLAIN SELECT * FROM STU LIMIT 300,10;
EXPLAIN SELECT * FROM STU OFFSET 300 ROWS FETCH NEXT 10 ROWS ONLY;
EXPLAIN SELECT * FROM (SELECT ROWNUM RN,* FROM STU) WHERE RN>=300 AND RN<=310;
通过以上查询计划可以看出来,前三种分页方式执行计划是一模一样的,而最后一种分页方式相较于前三种分页的执行计划来说,多了一个ROWNUM STOP KEY和PROJECT OPERATION的操作,所以我们在分页的时候应该优先选择前三种分页方式。
文章
阅读量
获赞