oracle sql语句_7个维度查看oracle执行计划的sql语句执行效率
概述
如何快速判断 SOL 执行计划是否高效,其实这是一个知识和经验的完美结合过程。其实也有一些维度可以作为参考的,下面一起来看看吧。
从执行计划读效率--返回行与逻辑读比率
DROP TABLE t;CREATE TABLE t as select * from dba_objects;--CREATE INDEX idx ON t (object_id);alter session set statistics_level=all;set linesize 200set pagesize 200select * from t where object_id=6;SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'allstats last'));
说明:总共获取 1 条记录(A-ROWS),产生 1249 次逻辑读( Buffers),这里很明显就有问题了。
从执行计划读效率--评估值准确的重要性
1、创建测试数据
DROP TABLE t1;CREATE TABLE t1 (id, col1, col2, pad) AS SELECT rownum, CASE WHEN rownum>5000 THEN 666 ELSE rownum END,rownum, lpad('*',100,'*') FROM dualCONNECT BY level <= 10000;INSERT INTO t1 SELECT id+10000, col1, col2, pad FROM t1;INSERT INTO t1 SELECT id+20000, col1, col2, pad FROM t1;INSERT INTO t1 SELECT id+40000, col1, col2, pad FROM t1;INSERT INTO t1 SELECT id+80000, col1, col2, pad FROM t1;COMMIT;CREATE INDEX t1_col1 ON t1 (col1);DROP TABLE t2;CREATE TABLE t2 AS SELECT * FROM t1 WHERE mod(col2,19) != 0;ALTER TABLE t2 ADD CONSTRAINT t2_pk PRIMARY KEY (id);
2、统计分析,但是不搜集直方图
BEGIN dbms_stats.gather_table_stats( ownname=>user, tabname=>'T1', cascade=>TRUE, estimate_percent=>100, method_opt=>'for all columns size 1', no_invalidate=>FALSE);END;/BEGIN dbms_stats.gather_table_stats( ownname=>user, tabname=>'T2', cascade=>TRUE, estimate_percent=>100, method_opt=>'for all columns size 1', no_invalidate=>FALSE);END;/
3、评估值是否准确
set linesize 200set pagesize 200explain plan for SELECT count(t2.col2) FROM t1 ,t2 WHERE t1.id=t2.id and t1.col1 = 666;select * from table(dbms_xplan.display());
SELECT /*+ gather__plan_statistics */ count(t2.col2) FROM t1, t2 WHERE t1.id=t2.id and t1.col1 = 666;select * from table(dbms_xplan.display_cursor(NULL,NULL,'allstats last'));
从执行计划读效率--类型转换
drop table t_col_type purge;create table t_col_type(id varchar2(20),col2 varchar2(20),col3 varchar2(20));insert into t_col_type select rownum,'abc','efg' from dual connect by level<=10000;commit;create index idx_id on t_col_type(id);set linesize 200set autotrace traceonlyselect * from t_col_type where id=6;
如果是filter一般就是走全扫了,access是索引扫
从执行计划读效率--递归调用
1、创建测试数据
set autotrace off;drop table people purge;create table people (first_name varchar2(200),last_name varchar2(200),sex_id number);create table sex(name varchar2(20), sex_id number);insert into people (first_name,last_name,sex_id) select object_name,object_type,1 from dba_objects;insert into sex(name,sex_id) values('男',1);insert into sex(name,sex_id) values('女',2);insert into sex(name,sex_id) values ('不详',3);commit;
2、创建函数
create or replace function get_sex_name(p_id sex.sex_id%type) return sex.name%type isv_name sex.name%type;beginselect nameinto v_namefrom sexwhere sex_id=p_id;return v_name;end;/
3、查看递归调用
set autotrace traceonlyselect sex_id,first_name||' '||last_name full_name,get_sex_name(sex_id) gender from people;
从执行计划读效率--表访问次数
1、创建测试数据
DROP TABLE t1;CREATE TABLE t1 (id, col1, col2, pad)AS SELECT rownum, CASE WHEN rownum>5000 THEN 666 ELSE rownum END, rownum, lpad('*',100,'*')FROM dualCONNECT BY level <= 10000;INSERT INTO t1 SELECT id+10000, col1, col2, pad FROM t1;INSERT INTO t1 SELECT id+20000, col1, col2, pad FROM t1;INSERT INTO t1 SELECT id+40000, col1, col2, pad FROM t1;INSERT INTO t1 SELECT id+80000, col1, col2, pad FROM t1;COMMIT;CREATE INDEX t1_col1 ON t1 (col1);DROP TABLE t2;CREATE TABLE t2 AS SELECT * FROM t1 WHERE mod(col2,19) != 0;ALTER TABLE t2 ADD CONSTRAINT t2_pk PRIMARY KEY (id);
2、统计分析,但是不搜集直方图
BEGIN dbms_stats.gather_table_stats( ownname=>user, tabname=>'T1', cascade=>TRUE, estimate_percent=>100, method_opt=>'for all columns size 1', no_invalidate=>FALSE);END;/BEGIN dbms_stats.gather_table_stats( ownname=>user, tabname=>'T2', cascade=>TRUE, estimate_percent=>100, method_opt=>'for all columns size 1', no_invalidate=>FALSE);END;/
3、查看表访问次数
alter session set statistics_level=all;SELECT /*+ gather_plan_statistics */ count(t2.col2) FROM t1 ,t2 WHERE t1.id=t2.id and t1.col1 = 666;SELECT * FROM table(dbms_xplan.display_cursor(NULL,NULL,'allstats last'));
从执行计划读效率--表真实访问行数
drop table t1 cascade constraints;create table t1 as select * from dba_objects;drop table t2 cascade constraints;create table t2 (id1,id2) as select rownum ,rownum+100 from dual connect by level <=1000;set autotrace traceonly;select * from (select t1.*, rownum as rn from t1, t2 where t1.object_id = t2.id1) a where a.rn >= 1 and a.rn <= 10;select * from (select t1.*, rownum as rn from t1, t2 where t1.object_id = t2.id1 and rownum<=10 ) a where a.rn >= 1;
从执行计划读效率--是否排序
drop table t purge;create table t as select * from dba_objects;set autotrace traceonlyselect * from t where object_id>2 order by object_id;
上面是几个维度判断执行计划中sql的效率,实际上还有一个计算方式是通过consistent gets来计算内存大致使用多少,通过physical reads来计算IO。
后面会分享更多关于DBA方面内容,感兴趣的朋友可以关注下!!
oracle sql语句_7个维度查看oracle执行计划的sql语句执行效率相关推荐
- ORACLE 查看有多个执行计划的SQL语句
在SQL优化过程,有时候需要查看哪些SQL具有多个执行计划(Multiple Executions Plans for the same SQL statement),因为同一个SQL有多个执行计划一 ...
- oracle执行脚本顺序执行吗,【ORACLE】记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 - 不及格的飞鱼...
记录通过执行Oracle的执行计划查询SQL脚本中的效率问题 问题现象: STARiBOSS5.8.1R2版本中,河北对帐JOB执行时,无法生成发票对帐文件. 首先,Quartz表达式培植的启动时间为 ...
- 引用:初探Sql Server 执行计划及Sql查询优化
引用:初探Sql Server 执行计划及Sql查询优化 原文:引用:初探Sql Server 执行计划及Sql查询优化 初探Sql Server 执行计划及Sql查询优化 收藏 MSSQL优化之-- ...
- SQL Server 中的执行计划和SQL Server Profiler
显示估计的执行计划 包括实际的执行计划 包括客户端统计信息 SQL Server Profiler
- oracle 修改默认日期格式_查看MySQL查询计划的方法和格式
查看MySQL的查询计划是分析查询的重要方法,可以通过使用EXPLAIN语句来确认优化器将采取哪种查询计划,是否与你的预期一致. 如何使用EXPLIAN?使用它有两种方式: 直接在查询语句之前直接加上 ...
- oracle 查询 历史数据,利用闪回查看Oracle表历史时刻数据
利用闪回查看Oracle表历史时刻数据 1.查看表历史时刻数据 select * from tab_test AS OF TIMESTAMP to_timestamp( 利用闪回查看Oracle表历史 ...
- oracle更新统计信息执行计划,为准确生成执行计划更新统计信息-analyze与dbms_stats...
如果我们想让CBO利用合理利用数据的统计信息,正确判断执行任何SQL查询时的最快途径,需要及时的使用analyze命令或者dbms_stats重新统计数据的统计信息. 例如索引跳跃式扫描(INDEX ...
- oracle强制执行计划,OBA技能2-Oracle执行计划顺序表连接
小仙我在学习索引执行行为的时候,有个疑惑?那就是索引是找到一个值就马上回表,然后再找下一个值,再回表. 比如索引唯一扫描,索引范围扫描,索引全扫描,索引快速扫描.好像都是要回表.尤其是范围,不范围完后 ...
- oracle绑定变量执行计划,绑定变量对执行计划的影响
发现无论启动或者关闭绑定变量窥探使用绑定变量的SQL都有可能选择错误的执行计划,当第一次硬解析产生执行计划时,之后的绑定变量SQL就会继续这个执行计划执行,有时可能是错的.如何改进呢? 1.当关闭绑定 ...
- 查看真实的执行计划 绑定变量对执行计划的影响--“绑定变量窥探”
--##################################################### --#### AWR执行计划 ...
最新文章
- 选择HttpHandler还是HttpModule?
- 12新特性格式化输出f-string
- 计算机网络实验(华为eNSP模拟器)——第十二章 VLAN集中管理协议(VCMP)
- C# 使用 WebBrowser 实现 HTML 转图片功能
- 建立你第一个 Outlook Add-in
- android水印添加水印,android 增加背景文字 水印效果(仿钉钉)
- 业界首款!小米10至尊纪念版将有屏下摄像头版本
- 中考计算机考试试题山西注意事项,2021年山西省中考考试注意事项(3)
- qml入门学习(八):通过loader对象动态加载和移除组件
- Eclipse快捷键大全(同样适用基于Eclipse开发的IDE)
- BLURtooth 漏洞导致攻击者覆写蓝牙认证密钥
- Ubuntu已经很好用了
- 卡巴斯基KEY文件的类型选择
- 示波器截取的波形图和数据CSV文件表,导入到MATLAB的simulink模型进行FFT分析,简单实用教程与示例
- 删除参考文献后的空行
- Win10笔记本开启热点让手机上网
- 使用 keepalived 设置虚拟 IP 环境
- MQTT keepalive和reconnect
- hids Elastic Security 系列1-Elastic Security介绍
- 数年沉寂之后,VR/AR产业开始起飞!
热门文章
- HDU2795 billboard【转化为线段树。】
- poj 1389 Area of Simple Polygons 线段树扫面线,和1151一样的嘛
- windows PC电脑必备3个实用软件
- 在苹果Mac中巧用聚焦搜索Spotlight
- 苹果Mac侧边栏笔记工具:​​​​​​​​SideNotes
- EverWeb for Mac(网页设计软件)
- Mac如何设置文本中的单双引号样式?
- 技巧:macOS 在 Finder(访达)中查看文件夹大小
- idea 配置 maven 和 镜像
- Cache【硬盘缓存工具类(包含内存缓存LruCache和磁盘缓存DiskLruCache)】