怎么看执行计划啊? 怎么看数据库里面的执行计划啊?????????????? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 --例:--解釋explain plan for select * from emp;--查看select * from table(dbms_xplan.display()); 咋PLSQL里,输入语句后,按F5就可以看执行计划 一、在线查看执行计划表 1.explain plan for select * from ...... 2.select * from table(DBMS_XPLAN.Display);二、使用oracle第三方工具: plsql developer(F5) Sql Tools (F9) Toad (Ctrl+E) 2 如何看懂oracle执行计划?(1)什么是执行计划答:当执行查询操作时对搜索路径(access path)的显示(2)如何访问数据答:逻辑上oracle通过以下三种方式获得数据:A 全表扫描(FTS) B 索引扫描(逻辑ROWID)C 物理ROWIDNotice:FTS:全表扫描会使表使用上升到HWM。当我们不断插入数据时,HWM会往不断上移,这样,在HWM之下的,就表示使用过的块,HWM之上的就表示已分配但从未使用过的块.原则上HWM只增不减,即使表中数据全删,HWM还是原值。出于这个特点,HWM很像一个水库的最高水位,不能说一个水库没水了,就说该水库的历史最高水位为0.但如果我们使用truncate命令,则该表的HWM会被重新置为0。(3) 执行计划层次关系采用最右最上最先执行的原则例子: 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 MERGE JOIN 2 1 SORT (JOIN) 3 2 NESTED LOOPS 4 3 TABLE ACCESS (FULL) OF 'B' 5 3 TABLE ACCESS (BY INDEX ROWID) OF 'A' 6 5 INDEX (RANGE SCAN) OF 'INX_COL12A' (NON-UNIQUE) 7 1 SORT (JOIN) 8 7 TABLE ACCESS (FULL) OF 'C' 看执行计划的第3列,即字母部分,每列值的左面有空格作为缩进字符。在该列值左边的空格越多,说明该列值的缩进越多,该列值也越靠右。如上面的执行计划所示:第一列值为6的行的缩进最多,即该行最靠右;第一列值为4、5的行的缩进一样,其靠右的程度也一样,但是第一列值为4的行比第一列值为5的行靠上;谈论上下关系时,只对连续的、缩进一致的行有效。优化模式是CHOOSE的情况下,看Cost参数是否有值来决定采用CBO还是RBO:SELECT STATEMENT [CHOOSE] Cost=1234 --Cost有值,采用CBOSELECT STATEMENT [CHOOSE] --Cost为空,采用RBO(9I是如此显示的)(4) 统计信息0 recursive calls(循环递归次数。一般原因:dictionary cache未命中;动态存储扩展;PL/SQL语句) 8 db block gets(buffer中读取的block数量,用于insert,update,delete,select for update) 6 consistent gets(回滚段中读的block数量) 0 physical reads(物理读:从磁盘读到buffer cache中的数据块数量) 0 redo size (写到redo logs的数据量) 551 bytes sent via SQL*Net to client 430 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 2 sorts (memory) (在内存中发生的排序) 0 sorts (disk) (在硬盘中发生的排序,与sort_area_size有关)Notice:逻辑读指的是Oracle从内存读到的数据块数量。一般来说是'consistent gets' + 'db block gets'。当在内存中找不到所需的数据块的话就需要从磁盘中获取,于是就产生了'phsical reads'。 Linux下安装oracle oracle 10g date number的长度 oracle触发器不能执行增删操作?! 关于Oracle语句优化的问题 请教一个关于SQL的问题,请高手帮忙解答!! 在程序发布的时候 有什么文件可以替代Oracle客户端的安装 求一条查询层次结构的ORCAL 查询语句~~~~~~ 日期函数请教!急!!! 用DELPHI怎样存取ORACLE9i的clob子段呢? 知道系统进程SID号,如何将其杀掉?很急,谢谢 Oracle11g sqlplus ORA-12560:TNS:Protocol adapter error。结贴马上给分! Oracle函数参数问题
--例:
--解釋
explain plan for select * from emp;
--查看
select * from table(dbms_xplan.display());
1.explain plan for select * from ...... 2.select * from table(DBMS_XPLAN.Display);
二、使用oracle第三方工具: plsql developer(F5)
Sql Tools (F9) Toad (Ctrl+E)
(1)什么是执行计划
答:当执行查询操作时对搜索路径(access path)的显示
(2)如何访问数据
答:逻辑上oracle通过以下三种方式获得数据:
A 全表扫描(FTS)
B 索引扫描(逻辑ROWID)
C 物理ROWID
Notice:
FTS:全表扫描会使表使用上升到HWM。当我们不断插入数据时,HWM会往不断上移,这样,在HWM之下的,就表示使用过的块,HWM之上的就表示已分配但从未使用过的块.原则上HWM只增不减,即使表中数据全删,HWM还是原值。出于这个特点,HWM很像一个水库的最高水位,不能说一个水库没水了,就说该水库的历史最高水位为0.但如果我们使用truncate命令,则该表的HWM会被重新置为0。
(3) 执行计划层次关系
采用最右最上最先执行的原则
例子:
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 MERGE JOIN
2 1 SORT (JOIN)
3 2 NESTED LOOPS
4 3 TABLE ACCESS (FULL) OF 'B'
5 3 TABLE ACCESS (BY INDEX ROWID) OF 'A'
6 5 INDEX (RANGE SCAN) OF 'INX_COL12A' (NON-UNIQUE)
7 1 SORT (JOIN)
8 7 TABLE ACCESS (FULL) OF 'C'
看执行计划的第3列,即字母部分,每列值的左面有空格作为缩进字符。在该列值左边的空格越多,说明该列值的缩进越多,该列值也越靠右。如上面的执行计划所示:第一列值为6的行的缩进最多,即该行最靠右;第一列值为4、5的行的缩进一样,其靠右的程度也一样,但是第一列值为4的行比第一列值为5的行靠上;谈论上下关系时,只对连续的、缩进一致的行有效。优化模式是CHOOSE的情况下,看Cost参数是否有值来决定采用CBO还是RBO:
SELECT STATEMENT [CHOOSE] Cost=1234 --Cost有值,采用CBO
SELECT STATEMENT [CHOOSE] --Cost为空,采用RBO(9I是如此显示的)(4) 统计信息
0 recursive calls(循环递归次数。一般原因:dictionary cache未命中;动态存储扩展;PL/SQL语句)
8 db block gets(buffer中读取的block数量,用于insert,update,delete,select for update)
6 consistent gets(回滚段中读的block数量)
0 physical reads(物理读:从磁盘读到buffer cache中的数据块数量)
0 redo size (写到redo logs的数据量)
551 bytes sent via SQL*Net to client
430 bytes received via SQL*Net from client
2 SQL*Net roundtrips to/from client
2 sorts (memory) (在内存中发生的排序)
0 sorts (disk) (在硬盘中发生的排序,与sort_area_size有关)Notice:逻辑读指的是Oracle从内存读到的数据块数量。一般来说是'consistent gets' + 'db block gets'。当在内存中找不到所需的数据块的话就需要从磁盘中获取,于是就产生了'phsical reads'。