《Oracle执行计划详细解读》

合集下载

oracle执行计划解读

oracle执行计划解读

oracle执行计划解读执行计划是Oracle数据库查询优化器生成的一个重要工具,用于指导数据库在执行查询语句时的执行路线和资源分配。

通过解读执行计划,我们可以深入了解查询语句的执行情况,进而优化查询性能。

以下是对Oracle执行计划的详细解读:1. 访问方法(Access Method):执行计划的第一步是选择合适的访问方法来获取所需的数据。

这取决于表的大小、索引的可用性和查询条件等。

常见的访问方法包括全表扫描(Full Table Scan)、索引扫描(Index Scan)和索引唯一扫描(Index Unique Scan)等。

2. 连接方式(Join Method):如果查询语句中包含连接操作(如JOIN),执行计划会根据连接条件选择合适的连接方式。

常见的连接方式有Nested Loops(嵌套循环连接)、Merge Sort(合并排序连接)和Hash Join(哈希连接)等。

优化器会根据表的大小和索引的可用性等因素选择最佳的连接方式。

3. 过滤条件(Filter):执行计划中的过滤条件显示了查询语句中使用的WHERE子句以及相关的索引和扫描操作。

过滤条件可以帮助我们判断查询是否使用了正确的索引和是否存在过多的全表扫描。

4. 排序方式(Sort):如果查询语句包含ORDER BY子句或GROUP BY子句,执行计划中会显示排序操作的方式。

排序方式分为内部排序(In-Memory Sort)和外部排序(Disk Sort)。

内部排序会将数据加载到内存中进行排序,适用于较小的数据集。

外部排序会将数据写入磁盘进行排序,适用于较大的数据集。

5. 访问路径(Access Path):执行计划中的访问路径显示了查询语句中使用的索引、分区和子查询等相关操作。

通过分析访问路径,我们可以判断查询语句是否使用了合适的索引和是否存在不必要的数据访问操作。

6. 成本估算(Cost Estimate):执行计划中的成本估算显示了优化器对执行每个操作所需的资源消耗的估计值。

oracle 执行计划 详解

oracle 执行计划 详解
• 这些步骤表示为一组数据库运算符,这些运算符将使 用和生成行
• 这些运算符及其实施的顺序由优化器使用查询转换及 物理优化技术的组合来确定
• 执行计划通常以表格的形式显示,但它实际上为树形
什么是执行计划?
查询
SELECT prod_category, avg(amount_sold) FROM sales s, products p WHERE p.prod_id = s.prod_id GROUP BY prod_category;
SALES
-------------------------------------------
如何获取执行计划
示例 3 显示 V$SQL_PLAN 中的任何其他语句的执行计划
1.直接:
SQL> SELECT plan_table_output FROM
table(dbms_xplan.display_cursor('fnrtqw9c233tt',null,'basic'));
2.间接:
SQL> SELECT plan_table_output FROM v$sql s, TABLE(dbms_xplan.display_cursor(s.sql_id,s.child_number, 'basic')) t WHERE s.sql_text like 'select PROD_CATEGORY%';
复杂表达式,其中包含来自多个表 使用 4 级或更高的动态抽样级别 的列
*柱状图会对具有 11g 之前的绑定的语句产生令人注目的副作用 请谨慎使用
访问方法 — 获取数据
访问方法 完整表扫描 按 ROWID 访问表 索引唯一扫描 索引范围扫描 索引跳过扫描 完整索引扫描

oracle执行计划怎么看

oracle执行计划怎么看

oracle执行计划怎么看【Oracle执行计划详解】Oracle执行计划是数据库查询优化的关键工具之一,它提供了查询语句的执行路径和各种操作的详细信息,可以帮助我们分析查询语句的性能问题和优化的可能方向。

本文将详细介绍如何查看Oracle执行计划,以及如何理解执行计划中的各种信息。

一、查看执行计划的方法在Oracle数据库中,我们可以通过以下几种方式来查看执行计划:1. 使用EXPLAIN PLAN语句EXPLAIN PLAN是Oracle内置的一个SQL语句,它能够分析给定的SQL语句,并将执行计划保存在数据库中。

具体用法如下:```EXPLAIN PLAN FOR your_sql_statement;```执行以上语句后,可以通过以下语句查看执行计划:```SELECT * FROM PLAN_TABLE;```2. 使用AUTOTRACE功能AUTOTRACE是Oracle提供的一个工具,它可以在执行SQL语句时同时输出执行计划和统计信息。

使用AUTOTRACE非常方便,只需执行以下语句:```SET AUTOTRACE ON;```然后执行目标SQL语句即可。

3. 使用SQL Developer如果你使用Oracle SQL Developer这样的工具,它会自动在查询结果面板中显示执行计划。

只需将光标悬停在查询语句上,即可查看详细的执行计划信息。

二、执行计划的解读无论通过哪种方式,查看的执行计划都是一张树状结构的表,它包含了查询语句中各个操作的执行顺序和执行方式。

以下是一些常见的执行计划信息解读:1. OPERATION该列显示了执行计划中的每个操作的名称,例如TABLE ACCESS FULL表示全表扫描,INDEX UNIQUE SCAN表示唯一索引扫描等。

2. OPTIONS该列显示了执行计划中的每个操作的附加选项,例如INDEX RANGE SCAN中的RANGE SCAN表示使用范围扫描。

oracle基础知识(十三)----执行计划

oracle基础知识(十三)----执行计划

oracle基础知识(⼗三)----执⾏计划⼀, 执⾏计划是什么? ⼀条查询语句在ORACLE中的执⾏过程或访问路径的描述。

即就是对⼀个查询任务,做出⼀份怎样去完成任务的详细⽅案。

⼆,执⾏计划的查看 设置autotrace序号命令解释1SET AUTOTRACE OFF此为默认值,即关闭Autotrace2SET AUTOTRACE ON EXPLAIN只显⽰执⾏计划3SET AUTOTRACE ON STATISTICS只显⽰执⾏的统计信息4SET AUTOTRACE ON包含2,3两项内容5SET AUTOTRACE TRACEONLY与ON相似,但不显⽰语句的执⾏结果SQL>set autotrace on;SQL>select table_name from user_tables;....特别多...在最下⾯1003 rows selected.Execution Plan------------这就是执⾏计划----------------------------------------------------------Plan hash value: 3799402342---------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------------------|0|SELECT STATEMENT ||5893| 949K|605 (1)|00:00:08||*1| HASH JOIN RIGHT OUTER||5893| 949K|605 (1)|00:00:08||2|TABLE ACCESS FULL| SEG$ |5734|63074|47 (0)|00:00:01||*3| HASH JOIN RIGHT OUTER||2798| 420K|558 (1)|00:00:07||4|INDEX FULL SCAN | I_USER2 |86|344|1 (0)|00:00:01||*5| HASH JOIN||2798| 409K|557 (1)|00:00:07||6|TABLE ACCESS FULL| TS$ |5|15|3 (0)|00:00:01||*7| HASH JOIN OUTER||2798| 401K|554 (1)|00:00:07||*8| HASH JOIN OUTER||2798| 379K|486 (1)|00:00:06||9| NESTED LOOPS ||2798| 366K|418 (1)|00:00:06||10| MERGE JOIN CARTESIAN||3751| 380K|292 (1)|00:00:04||*11| HASH JOIN||1|68|0 (0)|00:00:01||*12| FIXED TABLE FULL| X$KSPPI |1|55|0 (0)|00:00:01||13| FIXED TABLE FULL| X$KSPPCV |100|1300|0 (0)|00:00:01||14| BUFFER SORT ||3751| 131K|292 (1)|00:00:04||*15|TABLE ACCESS FULL| OBJ$ |3751| 131K|292 (1)|00:00:04||*16|TABLE ACCESS CLUSTER| TAB$ |1|30|1 (0)|00:00:01||*17|INDEX UNIQUE SCAN | I_OBJ# |1||0 (0)|00:00:01||18|INDEX FAST FULL SCAN | I_OBJ1 |86281| 421K|68 (0)|00:00:01||19|INDEX FAST FULL SCAN | I_OBJ1 |86281| 674K|68 (0)|00:00:01|---------------------------------------------------------------------------------------Predicate Information (identified by operation id):---------------------------------------------------1- access("T"."FILE#"="S"."FILE#"(+) AND "T"."BLOCK#"="S"."BLOCK#"(+) AND"T"."TS#"="S"."TS#"(+))3- access("CX"."OWNER#"="CU"."USER#"(+))5- access("T"."TS#"="TS"."TS#")7- access("T"."DATAOBJ#"="CX"."OBJ#"(+))8- access("T"."BOBJ#"="CO"."OBJ#"(+))11- access("KSPPI"."INDX"="KSPPCV"."INDX")12- filter("KSPPI"."KSPPINM"='_dml_monitoring_enabled')15- filter("O"."OWNER#"=USERENV('SCHEMAID') AND BITAND("O"."FLAGS",128)=0) 16- filter(BITAND("T"."PROPERTY",1)=0)17- access("O"."OBJ#"="T"."OBJ#")Statistics-----这⾥是统计信息----------------------------------------------------------8 recursive calls0 db block gets8809 consistent gets0 physical reads0 redo size31347 bytes sent via SQL*Net to client1250 bytes received via SQL*Net from client68 SQL*Net roundtrips to/from client1 sorts (memory)0 sorts (disk)1003 rows processed 使⽤sql查看SQL>set autotrace off;SQL> explain plan for select*from WRI$_DBU_FEATURE_METADATA;Explained.SQL>SELECT plan_table_output FROM TABLE(DBMS_XPLAN.DISPLAY('PLAN_TABLE')); PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------Plan hash value: 563503327-----------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-----------------------------------------------------------------------------------------------PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------|0|SELECT STATEMENT ||176|91344|5(0)|00:00:01||1|TABLE ACCESS FULL| WRI$_DBU_FEATURE_METADATA |176|91344|5(0)|00:00:01|-----------------------------------------------------------------------------------------------8 rows selected.SQL>select*from table(dbms_xplan.display);PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------Plan hash value: 563503327-----------------------------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |-----------------------------------------------------------------------------------------------PLAN_TABLE_OUTPUT--------------------------------------------------------------------------------|0|SELECT STATEMENT ||176|91344|5(0)|00:00:01||1|TABLE ACCESS FULL| WRI$_DBU_FEATURE_METADATA |176|91344|5(0)|00:00:01|-----------------------------------------------------------------------------------------------8 rows selected.SQL> 客户端的话界⾯有解释选项⾃⼰找找三,执⾏计划解释 01.执⾏顺序的原则 执⾏顺序的原则是:由上⾄下,从右向左 由上⾄下:在执⾏计划中⼀般含有多个节点,相同级别(或并列)的节点,靠上的优先执⾏,靠下的后执⾏ 从右向左:在某个节点下还存在多个⼦节点,先从最靠右的⼦节点开始执⾏。

Oracle优化之执行计划解析

Oracle优化之执行计划解析

Oracle优化之执行计划解析执行计划是Oracle数据库中一个非常重要的概念。

它是在执行SQL语句之前由Oracle优化器生成的一种指导性的路线图,用于指导数据库引擎执行查询和更新操作。

执行计划可以帮助我们理解SQL语句的执行过程,以及找出可能存在的性能瓶颈和优化机会。

执行计划是一个树状结构,其中每个节点表示一个SQL操作,如表扫描、索引扫描、排序、连接等。

每个节点都包含了一些关键信息,如访问方法、访问对象、访问行数等。

一般而言,执行计划中的节点都按照一定的顺序执行。

例如,首先进行表扫描,然后进行索引扫描,最后进行连接操作。

执行计划中的每个节点都有一个估计的成本,该成本与执行该操作所需的时间和资源有关。

优化器会根据这些成本来选择最佳的执行计划。

要解析执行计划,我们需要关注以下几个方面:1.访问方法:执行计划中的每个节点都有一个访问方法,用于告诉数据库引擎如何获取数据。

常见的访问方法包括表扫描、索引扫描、索引范围扫描、连接等。

通过分析访问方法,我们可以了解到数据库引擎是如何获取数据的,从而找出潜在的性能问题。

2.访问对象:执行计划中的每个节点都会访问一个或多个数据库对象,如表、索引等。

通过分析访问对象,我们可以了解到数据库引擎是如何获取和处理数据的,从而找出可能存在的性能瓶颈。

3.访问行数:执行计划中的每个节点都会访问一定数量的数据行。

通过分析访问行数,我们可以了解到数据库引擎是如何处理数据的,从而找出性能优化的机会。

4.执行顺序:执行计划中的节点是按照一定的顺序执行的。

通过分析执行顺序,我们可以了解到查询的执行过程,从而找出可能存在的性能问题。

在解析执行计划时,我们可以使用多种工具和技术。

常用的工具包括SQL*Plus的AUTOTRACE功能、Oracle SQL Developer的执行计划窗口等。

这些工具可以将执行计划以图形或文本的形式展示出来,方便我们进行分析和理解。

此外,我们还可以使用一些Oracle提供的视图和函数来获取和分析执行计划的信息。

ORACLE的执行计划

ORACLE的执行计划

ORACLE的执行计划
一、Oracle执行计划
1.概念
Oracle执行计划是指Oracle数据库根据用户提交的SQL语句以及其执行需要的资源,使用一系列步骤来完成数据库操作的一个流程。

Oracle 根据执行计划来选择最优的执行步骤,从而把用户提交的任务在经济高效的方式完成。

Oracle会在执行时分析语句,收集有关语句的信息,构建一个执行计划,并选择一些优化操作去完成SQL的执行,从而达到最优的性能。

2.作用
Oracle的执行计划不仅可以帮助我们识别SQL语句的生成过程,也可以识别其它的执行步骤,如执行的索引使用情况、连接的表数量、执行步骤的顺序等。

通过分析执行计划,我们可以找到瓶颈,分析出SQL语句的性能瓶颈,并根据瓶颈可以有效的改进SQL的性能,从而提高系统的效率。

3.类型
Oracle的执行计划可以分为Cost Based和Rule Base两种。

Cost Based执行计划是Oracle的主要执行计划,它会对查询中使用的资源(索引、表空间、大小等)进行评估,并根据评估结果来选择执行步骤,从而得到一个当前SQL最优的执行计划。

而Rule Base执行计划会根据Oracle的规则去生成一个执行计划,不会根据优化的考虑。

4.工具
在查看Oracle执行计划之前,我们首先要拿到Oracle的查询优化器产生的执行计划,有两种办法可以查看Oracle的执行计划:(1)SQL*Plus的Explain Plan命令:我们可以使用Explain Plan 命令。

oracle执行计划怎么看

oracle执行计划怎么看

oracle执行计划怎么看Oracle执行计划怎么看。

在Oracle数据库中,执行计划是指数据库系统在执行SQL语句时所采用的查询方式和顺序。

通过查看执行计划,我们可以了解数据库是如何执行我们的SQL 语句的,从而对SQL语句的性能进行优化。

在本文中,我们将介绍如何查看Oracle数据库的执行计划,以及如何解读执行计划中的信息。

1. 使用EXPLAIN PLAN语句。

要查看一个SQL语句的执行计划,可以使用Oracle提供的EXPLAIN PLAN语句。

这个语句可以告诉数据库系统在执行SQL语句时将采用的查询方式和顺序。

例如,我们可以这样使用EXPLAIN PLAN语句:```sql。

EXPLAIN PLAN FOR。

SELECT FROM employees WHERE department_id = 10;```。

在这个例子中,我们让数据库解释执行计划,然后可以通过查询相关的数据字典表来获取执行计划的信息。

2. 查询执行计划信息。

在使用EXPLAIN PLAN语句之后,我们可以通过以下查询来获取执行计划的信息:```sql。

SELECT FROM TABLE(DBMS_XPLAN.DISPLAY);```。

这个查询会返回执行计划的详细信息,包括每个步骤的操作类型、访问方法、访问对象等。

通过这些信息,我们可以了解数据库系统在执行SQL语句时所采用的具体方式,从而进行性能优化。

3. 解读执行计划。

执行计划中包含了很多信息,对于初学者来说可能有些晦涩。

但是,一旦掌握了一些基本的解读方法,就可以比较容易地理解执行计划了。

下面是一些常见的执行计划信息及其含义:ID,每个执行计划步骤的唯一标识符,可以用来区分不同的步骤。

Operation,操作类型,表示执行计划的具体操作,比如全表扫描、索引扫描、连接等。

Name,操作的具体对象,比如表名、索引名等。

Rows,估计的返回行数,表示数据库系统在执行该步骤时估计会返回多少行。

oracle执行计划怎么看

oracle执行计划怎么看

oracle执行计划怎么看Oracle执行计划怎么看。

Oracle数据库系统是当今世界上应用最广泛的关系型数据库管理系统之一,它的执行计划对于数据库性能的优化和调优起着至关重要的作用。

执行计划是Oracle数据库在执行SQL语句时生成的一种执行策略,它告诉我们数据库是如何执行SQL语句的,通过分析执行计划,我们可以了解SQL语句的执行效率,找到优化的空间,提高数据库的性能。

本文将介绍如何查看Oracle执行计划,以及如何解读执行计划,帮助大家更好地理解和优化SQL语句的执行效率。

一、查看执行计划的方法。

1. 使用EXPLAIN PLAN语句。

在Oracle中,我们可以使用EXPLAIN PLAN语句来获取SQL语句的执行计划。

具体的语法如下:EXPLAIN PLAN FOR。

SQL语句;然后可以使用如下语句来查看执行计划:SELECT FROM TABLE(DBMS_XPLAN.DISPLAY);2. 使用AUTOTRACE。

在SQLPlus或者SQL Developer中,我们可以使用AUTOTRACE功能来查看SQL语句的执行计划。

在SQLPlus中,可以使用如下语句开启AUTOTRACE功能:SET AUTOTRACE ON;然后执行需要查看执行计划的SQL语句即可。

3. 使用SQL Developer。

对于Oracle数据库开发人员来说,SQL Developer是一个非常常用的工具,它提供了直观的图形界面来查看SQL语句的执行计划。

在SQL Developer中,执行SQL语句后,可以通过右键菜单选择“Explain Plan”来查看执行计划。

二、执行计划的解读。

1. 表的访问方式。

在执行计划中,我们可以看到表的访问方式,包括全表扫描、索引扫描、唯一索引扫描等。

全表扫描意味着数据库将会扫描整张表,而索引扫描则表示数据库将会利用索引来快速定位数据,不同的访问方式对于SQL语句的性能影响很大。

oracle的执行计划

oracle的执行计划

oracle的执行计划Oracle是一种关系型数据库管理系统,执行计划是指在Oracle数据库中执行SQL语句的方式和过程。

它是由Oracle优化器生成的一种“蓝图”,它描述了通过何种方式来执行SQL以获得所需结果集。

这个“蓝图”包含有关要使用哪种访问方法,如何组合表和索引以及如何过滤结果集的信息,执行计划的准确性和有效性是影响SQL执行效率的主要因素之一。

一、Oracle执行计划的基本原理Oracle在执行SQL的时候,会自动根据查询条件和表结构等因素生成一份执行计划。

在执行计划的生成过程中,Oracle会根据不同的查询方法和算法,通过消耗最少的时间来获取查询结果。

因此,对于复杂的SQL查询,可能会有多个执行计划可供选择,而不同的执行计划会对查询效率产生显著的影响。

在考虑生成执行计划的方法和算法时,Oracle优化器一般会考虑以下几个因素:1. 索引的选择:如果有可用的索引可以用于查询,优化器就会选择使用索引。

2. 连接方式:Oracle查询可以使用多种连接方式,如NL join, Hash join和Sort merge join等,优化器会尝试选择最适合当前查询的连接方式。

3. 筛选条件的处理:Oracle会尝试使用所有可用的筛选条件来限制查询结果,以便从数据表中检索出尽可能少的行。

4. 查询方式:Oracle可以使用多种查询方式来获得所需结果,如扫描整个表或仅使用部分表,或使用合并或排序等操作来产生所需结果。

在执行计划的生成过程中,优化器通过对表统计信息的分析和对SQL语句分析,可以获得优化方案的估计成本,并选择代价最小的执行计划来执行查询。

二、Oracle执行计划的格式在Oracle中,可以使用EXPLAIN PLAN语句来查看SQL执行计划。

执行计划的输出结果通常包括以下几个部分:1. ID: 执行计划中每个操作的唯一标识符,可以作为连接其他操作的依据。

2. Operation: 执行计划中每个操作的名称。

oracle执行计划详解

oracle执行计划详解

oracle执⾏计划详解⼀:什么是Oracle执⾏计划?执⾏计划是⼀条查询语句在Oracle中的执⾏过程或访问路径的描述⼆:怎样查看Oracle执⾏计划?因为我⼀直⽤的PLSQL远程连接的公司数据库,所以这⾥以PLSQL为例:①:配置执⾏计划需要显⽰的项:⼯具 —> ⾸选项 —> 窗⼝类型 —> 计划窗⼝ —> 根据需要配置要显⽰在执⾏计划中的列执⾏计划的常⽤列字段解释:基数(Rows):Oracle估计的当前操作的返回结果集⾏数字节(Bytes):执⾏该步骤后返回的字节数耗费(COST)、CPU耗费:Oracle估计的该步骤的执⾏成本,⽤于说明SQL执⾏的代价,理论上越⼩越好(该值可能与实际有出⼊)时间(Time):Oracle估计的当前操作所需的时间②:打开执⾏计划:在SQL窗⼝执⾏完⼀条select语句后按 F5 即可查看刚刚执⾏的这条查询语句的执⾏计划注:在PLSQL中使⽤SQL命令查看执⾏计划的话,某些SQL*PLUS命令PLSQL⽆法⽀持,⽐如SET AUTOTRACE ON三:看懂Oracle执⾏计划①:执⾏顺序:根据Operation缩进来判断,缩进最多的最先执⾏;(缩进相同时,最上⾯的最先执⾏)例:上图中 INDEX RANGE SCAN 和 INDEX UNIQUE SCAN 两个动作缩进最多,最上⾯的 INDEX RANGE SCAN 先执⾏;同⼀级如果某个动作没有⼦ID就最先执⾏同⼀级的动作执⾏时遵循最上最右先执⾏的原则例:上图中 TABLE ACCESS BY GLOBAL INDEX ROWID 和 TABLE ACCESS BY INDEX ROWID 两个动作缩进都在同⼀级,则位于上⾯的 TABLE ACCESS BY GLOBAL INDEX ROWID 这个动作先执⾏;这个动作⼜包含⼀个⼦动作 INDEX RANGE SCAN,则位于右边的⼦动作 INDEX RANGE SCAN 先执⾏;图⽰中的SQL执⾏顺序即为:INDEX RANGE SCAN —> TABLE ACCESS BY GLOBAL INDEX ROWID —> INDEX UNIQUE SCAN —> TABLE ACCESS BY INDEX ROWID —> NESTED LOOPS OUTER —> SORT GROUP BY —> SELECT STATEMENT, GOAL = ALL_ROWS(注:PLSQL提供了查看执⾏顺序的功能按钮(上图中的红框部分) )②:对图中动作的⼀些说明:1. 上图中 TABLE ACCESS BY … 即描述的是该动作执⾏时表访问(或者说Oracle访问数据)的⽅式;表访问的⼏种⽅式:(⾮全部)TABLE ACCESS FULL(全表扫描)TABLE ACCESS BY ROWID(通过ROWID的表存取)TABLE ACCESS BY INDEX SCAN(索引扫描)(1) TABLE ACCESS FULL(全表扫描):Oracle会读取表中所有的⾏,并检查每⼀⾏是否满⾜SQL语句中的 Where 限制条件;全表扫描时可以使⽤多块读(即⼀次I/O读取多块数据块)操作,提升吞吐量;使⽤建议:数据量太⼤的表不建议使⽤全表扫描,除⾮本⾝需要取出的数据较多,占到表数据总量的 5% ~ 10% 或以上(2) TABLE ACCESS BY ROWID(通过ROWID的表存取) :先说⼀下什么是ROWID?ROWID是由Oracle⾃动加在表中每⾏最后的⼀列伪列,既然是伪列,就说明表中并不会物理存储ROWID的值;你可以像使⽤其它列⼀样使⽤它,只是不能对该列的值进⾏增、删、改操作;⼀旦⼀⾏数据插⼊后,则其对应的ROWID在该⾏的⽣命周期内是唯⼀的,即使发⽣⾏迁移,该⾏的ROWID值也不变。

Oracle的执行计划详解

Oracle的执行计划详解

Oracle的执行计划详解(2009-09-22 16:28:37)转载标签: oracle执行计划it 分类:oracle一、什么是执行计划An explain plan is a representation of the access path that is taken when a query is executed within Oracle.二、如何访问数据At the physical level Oracle reads blocks of data. The smallest amount of data read is a single Oracle block, the largest is constrained by operating system limits (and multiblock i/o). Logically Oracle finds the data to read by using the following methods:Full Table Scan (FTS) --全表扫描Index Lookup (unique & non-unique) --索引扫描(唯一和非唯一)Rowid --物理行id三、执行计划层次关系When looking at a plan, the rightmost (ie most inndented) uppermost operation is the first thing that is executed. --采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行1.看一个简单的例子:Query Plan-----------------------------------------SELECT STATEMENT [CHOOSE] Cost=1234**TABLE ACCESS FULL LARGE [:Q65001] [ANALYZED] --[:Q65001]表示是并行方式,[ANALYZED]表示该对象已经分析过了优化模式是CHOOSE的情况下,看Cost参数是否有值来决定采用CBO还是RBO:SELECT STATEMENT [CHOOSE] Cost=1234 --Cost有值,采用CBOSELECT STATEMENT [CHOOSE] Cost= --Cost为空,采用RBO2.层次的父子关系,看比较复杂的例子:PARENT1**FIRST CHILD****FIRST GRANDCHILD**SECOND CHILDHere the same principles apply, the FIRST GRANDCHILD is the initial operation then the FIRST CHILD followed by the SECOND CHILD and finally the PARENT collates the output.四、例子解说Execution Plan----------------------------------------------------------0 **SELECT STATEMENT Optimizer=CHOOSE (Cost=3 Card=8 Bytes=248)1 0 **HASH JOIN (Cost=3 Card=8 Bytes=248)2 1 ****TABLE ACCESS (FULL) OF 'DEPT' (Cost=1 Card=3 Bytes=36)3 1 ****TABLE ACCESS (FULL) OF 'EMP' (Cost=1 Card=16 Bytes=304)左侧的两排数据,前面的是序列号ID,后面的是对应的PID(父ID)。

oracle执行计划

oracle执行计划

oracle执行计划Oracle执行计划。

Oracle执行计划是数据库系统中非常重要的一个概念,它指的是Oracle数据库在执行SQL语句时所选择的最优执行路径。

通过执行计划,我们可以了解到Oracle是如何执行SQL语句的,从而可以对SQL语句进行优化,提高数据库的性能。

在本文中,我们将深入探讨Oracle执行计划的相关内容,包括执行计划的基本概念、执行计划的生成方式、执行计划的解读和优化等方面。

首先,我们来了解一下执行计划的基本概念。

执行计划是Oracle数据库优化器根据SQL语句和数据库对象的统计信息,通过优化算法生成的一种执行路径。

这个执行路径包括了SQL语句的执行顺序、访问方法、连接方式等信息。

通过执行计划,我们可以知道数据库是如何执行SQL语句的,从而可以对SQL语句进行优化,提高数据库的性能。

接下来,我们将介绍执行计划是如何生成的。

在Oracle数据库中,执行计划是由优化器根据SQL语句和数据库对象的统计信息生成的。

优化器会根据SQL语句的复杂度、表的大小、索引的选择等因素,选择最优的执行路径。

在生成执行计划时,优化器会考虑多种执行路径,并选择成本最低的执行路径作为最终的执行计划。

然后,我们将讨论如何解读执行计划。

执行计划通常以树状结构的方式呈现,包括了SQL语句的执行顺序、访问方法、连接方式等信息。

我们可以通过执行计划了解到SQL语句的执行路径,从而可以对SQL语句进行优化。

例如,我们可以通过执行计划了解到是否使用了索引、是否进行了全表扫描等信息,从而可以对SQL语句进行优化,提高数据库的性能。

最后,我们将介绍如何优化执行计划。

通过执行计划,我们可以了解到SQL语句的执行路径,从而可以对SQL语句进行优化。

例如,我们可以通过执行计划了解到是否使用了索引、是否进行了全表扫描等信息,从而可以对SQL语句进行优化,提高数据库的性能。

在优化执行计划时,我们可以考虑对SQL语句进行重写、创建索引、收集统计信息等方式,从而提高数据库的性能。

oracle执行计划详解

oracle执行计划详解

oracle执行计划详解Oracle执行计划详解。

在Oracle数据库中,执行计划是指数据库系统为了执行SQL语句而选择的最佳执行路径。

通过分析执行计划,我们可以了解数据库是如何执行SQL语句的,以及如何优化查询性能。

本文将详细介绍Oracle执行计划的相关内容,希望能对大家有所帮助。

执行计划是由Oracle优化器生成的,它会根据表的统计信息、索引信息和系统参数等因素来选择最佳的执行路径。

执行计划通常以树状图的形式展现,其中包括了SQL语句的执行顺序、访问方法、访问顺序等信息。

在执行计划中,我们经常会遇到以下几种重要的概念:1. 访问方法,包括全表扫描、索引扫描、索引范围扫描、唯一索引扫描等。

不同的访问方法对于不同的查询条件和表结构会有不同的性能影响。

2. 访问顺序,包括顺序访问和随机访问。

顺序访问通常发生在全表扫描的情况下,而随机访问则通常发生在索引扫描的情况下。

顺序访问的性能往往优于随机访问。

3. 连接方法,包括嵌套循环连接、哈希连接和排序-合并连接。

不同的连接方法对于不同的连接条件和表大小会有不同的性能影响。

通过分析执行计划,我们可以了解SQL语句的执行状况,并且可以根据执行计划来进行SQL语句的优化。

比如,我们可以通过创建索引、重写SQL语句、调整统计信息等方式来改善执行计划,从而提升查询性能。

在实际的数据库应用中,执行计划往往是优化性能的关键。

一个高效的执行计划可以大大减少查询的响应时间,提升系统的整体性能。

因此,我们需要深入了解执行计划的生成原理和优化方法,以便能够更好地优化数据库应用。

总之,执行计划是数据库优化的重要工具,它可以帮助我们了解SQL语句的执行情况,并且可以指导我们进行优化工作。

通过深入研究执行计划,我们可以更好地掌握Oracle数据库的优化技巧,提升系统的性能和稳定性。

希望本文能够对大家对Oracle执行计划有所帮助,也希望大家能够在实际的数据库应用中灵活运用执行计划来优化系统性能。

ORACLE中的执行计划

ORACLE中的执行计划

Oracle 执行计划1,什么是执行计划所谓执行计划,顾名思义,就是对一个查询任务,做出一份怎样去完成任务的详细方案。

举个生活中的例子,我从珠海要去英国,我可以选择先去香港然后转机,也可以先去北京转机,或者去广州也可以。

但是到底怎样去英国划算,也就是我的费用最少,这是一件值得考究的事情。

同样对于查询而言,我们提交的SQL仅仅是描述出了我们的目的地是英国,但至于怎么去,通常我们的SQL中是没有给出提示信息的,是由数据库来决定的。

我们先简单的看一个执行计划的对比:SQL> set autotrace traceonly执行计划一:SQL> select count(*) from t;COUNT(*)----------24815Execution Plan0 SELECT STATEMENT Optimizer=CHOOSE1 0 SORT (AGGREGATE)2 1 TABLE Access (FULL) OF 'T'执行计划二:SQL> select count(*) from t;COUNT(*)24815Execution Plan0 SELECT STATEMENT Optimizer=CHOOSE (Cost=26 Card=1)1 0 SORT (AGGREGATE)2 1 INDEX (FULL SCAN) OF 'T_INDEX' (NON-UNIQUE) (Cost=26 C ard=28180)这两个执行计划中,第一个表示求和是通过进行全表扫描来做的,把整个表中数据读入内存来逐条累加;第二个表示根据表中索引,把整个索引读进内存来逐条累加,而不用去读表中的数据。

但是这两种方式到底哪种快呢?通常来说可能二比一快,但也不是绝对的。

这是一个很简单的例子演示执行计划的差异。

对于复杂的SQL(表连接、嵌套子查询等),执行计划可能几十种甚至上百种,但是到底那种最好呢?我们事前并不知道,数据库本身也不知道,但是数据库会根据一定的规则或者统计信息(statistics)去选择一个执行计划,通常来说选择的是比较优的,但也有选择失误的时候,这就是这次讨论的价值所在。

oracle sql执行计划解析

oracle sql执行计划解析

oracle sql执行计划解析在Oracle SQL中,执行计划是指数据库在执行查询时确定的操作顺序和方法。

通过解析执行计划,我们可以了解查询语句在数据库中的执行情况,从而进行性能优化和调优。

本文将对Oracle SQL执行计划进行解析,并解释各部分的含义。

执行计划通常以树状结构显示,包括多个步骤和子步骤。

其中,每个步骤表示一个数据库操作,如全表扫描、索引扫描或连接操作,而子步骤表示每个步骤的具体实现方式。

在执行计划中,每个步骤都有相应的成本和行数。

成本表示执行该步骤的开销,Oracle会根据成本选择最优的执行计划。

行数表示每个步骤返回的记录数,通过该值可以了解数据量的大小。

常见的执行计划操作包括:1. 全表扫描:遍历整个表,适用于查询需要扫描大部分或全部数据的情况。

如果全表扫描的行数较大,可能需要考虑添加索引或进行其他优化。

2. 索引扫描:使用索引进行查询,避免全表扫描。

索引的选择对查询性能至关重要,需要确保索引的正确创建和维护。

3. 连接操作:将多个表连接起来,通常通过嵌套循环连接或哈希连接实现。

连接操作的成本较高,特别是在大数据量情况下,需要优化连接的顺序和方式。

4. 排序操作:对结果进行排序,根据ORDER BY子句的要求执行。

排序可能需要大量的CPU和I/O资源,尤其是在大数据量或复杂查询的情况下。

5. 分组操作:根据GROUP BY子句对结果进行分组,并计算每个组的聚合值。

分组操作需要对数据进行排序,因此会产生一定的开销。

通过解析执行计划,我们可以分析查询的性能瓶颈,并根据需要进行调整。

例如,可以通过创建索引来改善查询性能,或者对复杂查询进行优化,减少不必要的操作和数据传输。

总之,执行计划是优化和调优Oracle SQL查询的重要工具。

通过仔细解析执行计划,我们可以确定查询的执行顺序和方法,并针对性地进行优化,以提高查询性能。

ORACLE执行计划

ORACLE执行计划

ORACLE执行计划Oracle执行计划是Oracle数据库用于优化和执行SQL语句的步骤和顺序的一个计划。

在执行SQL语句之前,Oracle会分析SQL语句并生成一个执行计划,然后根据执行计划来执行SQL语句。

执行计划可以帮助开发人员和数据库管理员了解SQL语句的执行过程,找出性能瓶颈,并进行优化调整。

执行计划由一系列步骤和操作符组成,每个操作符表示一个SQL语句执行的特定步骤或操作。

Oracle数据库使用一个优化器来生成执行计划,优化器会考虑多个因素,如表的大小、索引的选择、连接类型等,以选择最佳的执行计划。

执行计划中的操作符可以分为以下几类:1. 表扫描操作符(Table Scan Operator):表示从表中逐行读取数据。

这是最基本和最常见的操作符之一、它可以是全表扫描(Full Table Scan)或索引扫描(Index Scan)。

2. 连接操作符(Join Operator):表示连接两个或多个表的操作。

连接操作是查询复杂性的一个重要组成部分,通过选择最合适的连接类型,可以极大地提高查询的性能。

3. 过滤操作符(Filter Operator):表示对查询结果进行筛选,只返回符合特定条件的数据。

过滤操作可以利用索引或表达式进行优化。

4. 排序操作符(Sort Operator):表示对查询结果进行排序,以按特定的顺序返回数据。

排序操作可以使用内存排序(In-Memory Sort)或磁盘排序(Disk Sort)。

5. 分组操作符(Group By Operator):表示将查询结果按照指定的列进行分组。

分组操作常用于聚合查询,如求和、计数等。

6. 聚合操作符(Aggregation Operator):表示对分组后的数据进行聚合计算。

聚合操作包括求和、计数、平均值等。

7. 索引操作符(Index Operator):表示使用索引来加速查询。

索引操作包括索引扫描、索引唯一扫描等。

Oracle执行计划详解

Oracle执行计划详解

Oracle执行计划详解(VG8\%x.\)\0简介:ITPUB个人空间-Lp9ohHv }*V本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。

/V(Odd$J+S#M0E0 并有总结和概述,便于理解与记忆! }%{ `#O+SQT%Tc0+++ITPUB个人空间-D^mG"]`目录`-Nx [*h!~7m1A0---h/C$o4z'B#vm0 一.相关的概念Y&TS-S&K5q9^L0 Rowid的概念ITPUB个人空间7|}z T3S U;F/vfs yRecursive Sql概念d{+P)se$b+P3ARGV0 Predicate(谓词)$W7Y1{$['\#g m8M0 DRiving Table(驱动表)e|d U8G rGB-V*R0 ProbedTable(被探查表)Z:}8k7FS f.q;f0组合索引(concatenated index)"M FoL)Y7f4@N4V!Q0 可选择性(selectivity)ITPUB个人空间#y6dB:q!KtuK二.oracle访问数据的存取方法ITPUB个人空间$W z$\*L m#s$kA1)全表扫描(Full Table Scans,FTS)h$[yB*t;?0WH0 2)通过ROWID的表存取(Table Access byROWID或rowid lookup)!d7@EZ+BV03)索引扫描(Index Scan或index lookup)有4种类型的索引扫描:ITPUB个人空间/x8@'`'q/{3h:T;IG(1)索引唯一扫描(indexunique scan)ITPUB个人空间G_$e3u5o-pC(2)索引范围扫描(index range scan);pEXRegk-a0 在非唯一索引上都使用索引范围扫描。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第一个执行 计划
对应SQL语句:
select * from dual;
执行计划:
OPERATION
OPTIONS OBJECT_NAME COST POSITION
SELECT STATEMENT
TABLE ACCESS FULL DUAL
1
怎样看执行计划
执行计划其实是一棵树,层次最深的最先执行,层次 相同,上面的先执行。显示时已经按照层次缩进,因 此从最里面的看起。最后一组就是驱动表。例:
select lpad(' ',5*(level-1))||operation operation, options, object_name, cost,position
from plan_table start with id=0 and STATEMENT_ID='testplan' connect by prior id=parent_id ;
optimizer varchar2 (255),
search_columns integer,
id
integer,
parent_id integer,
position integer,
cost
integer,
cardinality integer,
bytes
integer,
other_tag varchar2 (255),
COST
18 5 2 2 1
select count(*) from prm_adjustprice main,prm_adjustprice_b detail
驱动表
where main.cadjpriceid=detail.CADJPRICEID and main.DADJPRICEDATE >= '2004-04-18'
2.Autotrace(自动跟踪)
基本使用方式:SQL> set autotrace on; (SQL PLUS中使 用)
3.其他工具
准备:创建Plan_table表
create table plan_table ( statement_id
timestamp date,
remarks
varchar2 (80),
0 SELECT STATEMENT Optimizer=CHOOSE
1 0 TABLE ACCESS (FULL) OF 'DUAL'
结果数据 执行计划
Statistics ----------------------------------------------------------
0 recursive calls 0 db block gets 3 consistent gets 0 physical reads 0 redo size 372 bytes sent via SQL*Net to client 511 bytes received via SQL*Net from client 2 SQL*Net roundtrips to/from client 0 sorts (memory) 0 sorts (disk) 1 rows processed SQL>
统计信息
使用Explain
1,删除上次解析数据
delete from plan_table where STATEMENT_ID='testplan';
2,执行解析
explain plan set STATEMENT_ID='testplan' for select * from dual;
3,显示执行计划
存储器,得到需要的结果集。
执行计划的主要内容:访问方式,访问 顺序。
得到执行计划的方式
1.Explain(解释)
基本格式:explain plan set STATEMENT_ID='testplan' For Select ….. (Select,insert,update 等数据操作语句均可)
BEGIN Oracle执行计划解读
培训教师 : 谢高兴 时 间 : 2006.4.27
SQL执行过程
1,解析SQL •检查安全性 •检查SQL语法 •查询重新书写
2,执行 •读取结果集 3,显示结果集 4,转换字段数据
执行计划
执行计划: Oracle内部的机器级代码,决定如何访问
operation varchar2 (30),
options
varchar2 (30),
object_node varchar2 (128),
object_owner varchar2 (30),
object_name varchar2 (30),
object_instance integer,
object_type varchar2 (30),
and detail.CINVENTORYID in (select pk_invmandoc from bd_invmandoc where bd_invmandoc.SEALFLAG='N');
表访问方式
全表扫描:
读取表的每一条记录,顺序地从第一个数据块开始知道结尾 标志。
OPERATION
SORT NESTED LOOPS HASH JOIN TABLE ACCESS TABLE ACCESS TABLE ACCESS INDEX
OPTIONS
AGGREGATE
OBJECT_NAME
FULL FULL BY INDEX ROWID UNIQUE SCAN
PRM_ADJUSTPRICE PRM_ADJUSTPRICE_B BD_INVMANDOC PK_BD_INVMANDOC
partition_start varchar2 (255),
partition_stop varchar2 (255),
partition_id integer,
other
long,
distribution varchar2 (30) );
varchar2 (30),
AUTO TRACE
SQL> set autotrace on; SQL> select * from dual; D X Execution Plan ----------------------------------------------------------
相关文档
最新文档