网站内容优化方案(优化系统--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 内容将在稍后分享。有兴趣的朋友可以关注一下~

  

0 个评论

要回复文章请先登录注册


官方客服QQ群

微信人工客服

QQ人工客服


线