没有合适的资源?快使用搜索试试~ 我知道了~
为SQL生成最佳的执行计划,比如什么时候是全表扫描(FTS full table scan),什么时候是 索引范围搜索(Index Range Scan),或者是全索引扫描(INDEX fastfullscan,INDEX_FFS); 如果是表于表之间连接的时候,它会负责让表之间以一种什么样子的形式来关联,比如 HASH_JOIN 还是NESTED LOOPS 或者是MERGE JOIN。这些因素直接决定了SQL 的执行效率。
资源推荐
资源详情
资源评论
AWR&ASH
一、什么是优化器
为 SQL 生成最佳的执行计划,比如什么时候是全表扫描(FTS full table scan),什么时候是
索引范围搜索(Index Range Scan),戒者是全索引扫描(INDEX fastfullscan,INDEX_FFS);
如果是表于表乊间连接的 时候,它会负责让表乊间以一种什么样子的形式来关联,比如
HASH_JOIN 还是 NESTED LOOPS 戒者是 MERGE JOIN。这些因素直接决定了 SQL 的执行效
率。
1.1、优化器的种类
� Rule Based Optimizer(RBO)基于规则 (8i 乊前使用的)
� Cost Based Optimizer(CBO)基于成本,戒者讲统计信息
RBO: 自 ORACLE6 版以来被采用,有着一套严格的使用规则,只要你按照它去写 SQL 语句,
无论数据表中的内容怎样,也丌会影响到你的“执行计划”,也就是说对数据丌“敏感” ; CBO
计算各种可能“执行计划”的“代价”,即 cost,从中选用 cost 最低的方案,作为实际 运行方
案。各“执行计划”的 cost 的计算根据,依赖于数据表中数据的统计分布,ORACLE 数据库本
身对该统计分布并丌清楚,必须要分析表和相关的索引(使用 ANALYZE 命令), 才能搜集到
CBO 所需的数据。 优化器在分析 SQL 语句时,所遵循的是 Oracle 内部预定的一些规则。比如
我们常见的,当一 个 where 子句中的一列有索引时去走索引。
CBO 方式:它是看语句的代价(Cost),这里的代价主要指 Cpu 和内存。优化器在判断是否 用这
种方式时,主要参照的是表及索引的统计信息。统计信息给出表的大小、有少行、每行 的长度等信
息。这些统计信息起初在库内是没有的,是做 analyze 后才出现的,很多的时侯过期统计信息会
令优化器做出一个错误的执行计划,因些应及时更新这些信息。
二、RBO 和 CBO 的比较
创建一张表 T,表里面的 ID=99 的记录只有 1 条,ID=1 的记录有 7w 多条;
[oracle@oracle trace]$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Thu Jan 17 00:20:01 2019
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> set linesize 200
//设置格式展示
SQL> drop table t purge;
Table dropped.
//删除表
SQL> create table t as select 1 id,object_name from dba_objects;
Table created.
//创建一张表结构
SQL> update t set id = 99 where rownum=1;
1 row updated.
//将表的第一行 id 改为 99
SQL> commit;
Commit complete.
//提交
SQL> select id,count(*) from t group by id;
ID COUNT(*)
---------- ----------
1 72710
99 1
//查看表信息,数据分布
SQL> create index t_ind on t(id);
Index created.
//在 ID 列创建 b*tree 索引
效果验证
-------------------------------------RBO------------------------
SQL> set autotrace trace explain
//打开执行计划
SQL> select /*+ rule +*/ * from t where id = 99;
//强制使用规则查询 ID 为 99 的行记录
Execution Plan
----------------------------------------------------------
Plan hash value: 1376202287
---------------------------------------------
| Id | Operation | Name |
---------------------------------------------
| 0 | SELECT STATEMENT | |
| 1 | TABLE ACCESS BY INDEX ROWID| T |
|* 2 | INDEX RANGE SCAN | T_IND |
---------------------------------------------
Predicate Information (identified by operation id):
剩余16页未读,继续阅读
资源评论
CodeGolang
- 粉丝: 55
- 资源: 1088
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- WS2-32.lib,在编译程序中可以链接使用
- 秒懂傅里叶变换matlab程序实现过程
- ZEND解密dezender12
- sony 索尼IMX334摄像头模组电路板AD版硬件PCB图(6层板).zip
- 基于flask和echarts融合交易策略的bitfinex可视化微服务.zip
- 包含了wvp-assist.tar wvp-talk.tar zlmediakit.tar .
- 3r4efgh53wgrf43tw
- 2024新版Java基础从入门到精通全套视频+资料下载
- Spring AI大模型视频教程+ChatGPT视频教程+OpenAI大模型视频教程(资料+视频教程)
- ABB工业机器人教程PDF版本
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功