优化嵌套查询的oracle,基于ORACLE的SQL优化案例_PART1

CBO( Cost

Based Optimizer)优化器是目前ORACLE默认使用的优化器,它使用统计信息、查询转换等计算各种可能的访问路径成本,并生成多种备选执行计划,最终ORACLE选择成本最低的作为最终执行计划。与旧的RBO(Rule Based Optimizer)相比,更加灵活,可根据实际情况选择最佳执行路径。

但是,由于其自身非常复杂,CBO的限制以及存在的BUG非常多,这时,作为SQL开发和优化人员,应该根据CBO特性,编写高效语句,以避免踩坑CBO优化器。

本文以两类常见的SQL优化问题来探讨基于ORACLE的高效SQL编写和优化。

1. ORACLE分页查询优化之道

ORACLE中主要使用ROWNUM来实现TOP-N分页查询,分页SQL编写有如下规则:

1)分页查询一般需要排序,内层查询需要先ORDER BY。

2)如果查询TOP–N行,需要两层嵌套:内层先排序,在外层嵌套查询ROWNUM,并且同一层按照WHERE ROWNUM

3)如果查询第M行到第N行,需要三层嵌套:内层先排序,之后外层嵌套查询ROWNUM并且将ROWNUM取别名,比如取别名为RN,且同一层按照WHERE ROWNUM 或>=进行过滤。

分页查询优化要点:

分页查询的排序是高代价操作,如果不能避免排序,则需要所有结果集查询完毕后进行排序操作后,才能进行分页选择。如果能够避免排序,则可以充分使用到ORACLE分页查询的COUNT STOPKEY算法,比如找前100行,则只要找到100行整条语

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
第Ⅰ部分 核心数据库概念 第1章 Oracle Database 10g体系结构 第2章 安装Oracle Database 10g和创建数据库 第3章 升级到Oracle Database 10g 第4章 规划Oracle应用程序——方法、风险和标准 第Ⅱ部分 SQL和SQL*Plus 第5章 SQL中的基本语法 第6章 基本的SQL*Plus报表及命令 第7章 文本信息的收集与修改 第8章 正则表达式搜索 第9章 数值处理 第10章 日期:过去、现在及日期的差 第11章 转换函数与变换函数 第12章 分组函数 第13章 当一个查询依赖于另一个查询时 第14章 一些复杂的技术 第15章 更改数据:插入﹑更新﹑合并和删除 第16章 DECODE和CASE SQL中的if-then-else 第17章 创建和管理表、视图、索引、群集和序列 第18章 Oracle基本安全 第Ⅲ部分 高级内容 第19章 高级安全性—— 虚拟专用数据库 第20章 使用表空间 第21章 用SQL*Loader加载数据 第22章 使用Data Pump导入和导出 第23章 访问远程数据 第24章 使用物化视图 第25章 使用Oracle Text进行文本搜索 第26章 使用外部表 第27章 使用回闪查询 第28章 回闪:表和数据库 第Ⅳ部分 Pl/SQL 第29章 PL/SQL简介 第30章 触发器 第31章 过程、函数与程序包 第32章 使用本地动态SQL和DBMS_SQL 第Ⅴ部分 对象关系数据库 第33章 实现类型、对象视图和方法 第34章 收集器(嵌套表和可变数组) 第35章 使用大对象 第36章 面向对象的高级概念 第Ⅶ部分 Oracle中的Java 第37章 Java简介 第38章 JDBC程序设计 第39章 Java存储过程 第40章 Oracle真正应用群集 第41章 网格体系结构和管理 第Ⅷ部分 指南 第42章 Oracle数据字典指南 第43章 调整应用程序和SQL旅行者指南 第44章 调整中的案例分析 第45章 Oracle Application Server 10g的旅行者指南 第46章 数据库管理旅行者指南 第47章 XML旅行者指南

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值