网站内容优化方案(优化系统--Oracle分页查询的三种实现方案,值得收藏 )
优采云 发布时间: 2022-04-16 06:19网站内容优化方案(优化系统--Oracle分页查询的三种实现方案,值得收藏
)
概览
今天主要介绍Oracle分页的一种实现方式,这也是近期部门培训中引入的一个新特性。以下是测试的一个实验。
1、环境准备
267 万测试数据准备就绪
CREATE TABLE t AS SELECT ROWNUM ID, A.* FROM DBA_OBJECTS A;
insert into t select * from t;
/
/
.....
2、要求
要求:按对象ID排序,取第21-30条记录。
你能想一想如何实现这种情况吗?
3、实施方案一
这是通过rownum分页查询实现的:
set timing on;
SELECT OBJECT_ID, OBJECT_NAME FROM (SELECT ROWNUM RN, A.* FROM (SELECT OBJECT_ID, OBJECT_NAME FROM T ORDER BY OBJECT_ID) A WHERE ROWNUM 20;
查看执行计划
4、实施方案二
这主要是通过前面介绍的分析函数来实现的:
SET TIMING ON;
SELECT OBJECT_ID, OBJECT_NAME FROM (SELECT ROW_NUMBER() OVER(ORDER BY OBJECT_ID) RN, OBJECT_ID, OBJECT_NAME FROM T) WHERE RN 20;
查看执行计划:
性能没有太大变化。
5、实施方案3
Database 12c 的 FETCH FIRST ROWS 特性简化了旧版本中 ROW_NUM() 或 ROWNUM 的分页排序方式,大大节省了分页查询语句的开发时间。
row-limiting 子句用于限制查询返回的行数
12c row-limiting 子句将来会被广泛使用来限制返回的行用于排序数据(MySQL 上早就有的一个特性,MySQL 可能特别考虑到简化 网站@ 开发了这个特性> 分页查询),也可以称为Top-N查询。
这是 12c 的新功能。没有相关环境,所以没有列出执行计划。
SET TIMING ON;
--12c才有
SELECT OBJECT_ID, OBJECT_NAME FROM T ORDER BY OBJECT_ID OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
另外,我主要分享了Oracle的4个新特性。这4个新特性有不同的应用场景。建议您多练习和掌握它们。更多 devops 和 DBA 内容将在稍后分享。有兴趣的朋友可以关注一下~