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解释计划详解Oracle系统中有一种叫做“解释计划”的概念,用来提高SQL语句的执行效率。
本文旨在帮助读者更加深入地理解解释计划,掌握解释计划的基本原理,在性能优化时能够使用解释计划。
什么是解释计划?解释计划是一种用来描述Oracle系统如何执行SQL语句的方法,也可以说是Oracle的SQL执行步骤。
Oracle根据解释计划的步骤来执行SQL,从而提高SQL的执行效率。
Oracle的解释计划由三个主要的步骤组成:计划生成步骤、优化步骤和执行步骤。
1. 计划生成步骤:这一步的主要任务是将SQL语句转换成Oracle的执行计划。
2. 优化步骤:这个步骤将SQL语句中的查询条件进行优化,使用特定的执行路径来改善性能。
3. 执行步骤:这一步是最终执行SQL的步骤,根据解释计划的步骤来执行。
从上述步骤中可以看出,解释计划是Oracle系统中执行SQL语句的重要组成部分,也是Oracle性能优化的关键。
解释计划的优势解释计划的优势在于能够更好地执行SQL,从而提高SQL的性能。
1. 有效地使用所有可用的资源:根据解释计划,Oracle可以充分利用有限的资源,从而提高SQL查询的效率。
2. 减少不必要的IO读写:解释计划能够有效地减少不必要的IO读写,这样可以提高SQL查询的速度。
3. 根据查询条件使用最佳的SQL语句:解释计划能够根据查询的内容,使用最佳的SQL语句来执行查询,从而提高SQL查询的速度。
解释计划的使用要使用解释计划,首先要对其有一定的了解,以便在性能优化时能够使用解释计划。
1. 运行explain plan语句来查看解释计划:使用explain plan 语句可以查看Oracle系统如何执行SQL语句。
2. 分析解释计划:根据解释计划来分析SQL语句是否能够更好地执行,并根据解释计划来优化SQL语句,提高SQL查询的性能和效率。
3. 使用hints来控制解释计划:也可以使用hints来控制解释计划,从而提高SQL查询的性能和效率。
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中的执⾏过程或访问路径的描述。
即就是对⼀个查询任务,做出⼀份怎样去完成任务的详细⽅案。
⼆,执⾏计划的查看 设置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执行计划
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数据库中执行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中常见的执⾏计划及其简单解释⼀、访问表执⾏计划1、table access full:全表扫描。
它会访问表中的每⼀条记录(读取⾼⽔位线以内的每⼀个数据块)。
2、table access by user rowid:输⼊源rowid来⾃于⽤户指定。
3、table access by index rowid:输⼊源rowid来⾃于索引。
4、table access by global index rowid:全局索引获取rowid,然后再回表。
5、table access by local index rowid:分区索引获取rowid,然后再回表。
6、table access cluster:通过索引簇的键来访问索表。
7、external table access:访问外部表。
8、result cache:结果集可能来⾃于缓存。
9、mat_view rewrite access:物化视图。
⼆、与B-TREE索引相关的执⾏计划1、index unique scan:只返回⼀条rowid的索引扫描,或者unique索引的等值扫描。
2、index range scan:返回多条rowid的索引扫描。
3、index full scan:顺序扫描整个索引。
4、index fast full scan:多块读⽅式扫描整个索引。
5、index skip scan:多应⽤于组合索引中,引导键值为空的情况下索引扫描。
6、and-equal:合并来⾃于⼀个或多个索引的结果集。
7、domain index:应⽤域索引。
三、与BIT-MAP索引相关的执⾏计划1、bitmap conversion:将位转换为rowid或相反。
2、bitmap index:从位图中取⼀个值或⼀个范围。
3、bitmap merge4、bitmap minus:5、bitmap or:四、与表连接相关的执⾏计划1、merge join:排序合并连接。
oracle 解释计划解读
oracle 解释计划解读
Oracle解释计划解读是数据库性能调优过程中的重要一环。
解释计划是Oracle
数据库查询优化器生成的一种执行计划,描述了数据库是如何处理SQL语句的。
通过分析解释计划,我们可以了解查询语句的执行效率和潜在的性能问题。
解释计划由一系列步骤组成,每个步骤代表了一个操作,例如表扫描、索引扫描、连接等。
每个步骤都包含了操作的代价、操作类型和操作所需的资源等信息。
在解释计划中,操作类型包括全表扫描、索引扫描、连接操作等。
根据查询语
句的复杂度和表结构,优化器会选择不同的操作类型来完成查询任务。
操作的代价用于评估每个操作在执行过程中所消耗的资源,通常以逻辑读、物理读、CPU消
耗等指标来衡量。
优化器会根据代价估算来选择最佳的执行计划。
解释计划中还包含了操作的顺序和访问路径。
操作的顺序表示了操作的执行先
后顺序,例如先执行表扫描,再执行索引扫描。
访问路径描述了操作是如何访问数据的,例如通过全表扫描或者索引来获取需要的数据。
通过分析解释计划,我们可以发现潜在的性能问题。
例如,如果解释计划中存
在全表扫描操作,可能意味着查询语句中缺少了必要的索引,导致查询效率低下。
同时,我们还可以根据代价估算来比较不同执行计划的性能,选择最佳的执行计划。
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的执行计划详解(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数据库中,执行计划是指数据库系统为了执行SQL语句而选择的最佳执行路径。
通过分析执行计划,我们可以了解数据库是如何执行SQL语句的,以及如何优化查询性能。
本文将详细介绍Oracle执行计划的相关内容,希望能对大家有所帮助。
执行计划是由Oracle优化器生成的,它会根据表的统计信息、索引信息和系统参数等因素来选择最佳的执行路径。
执行计划通常以树状图的形式展现,其中包括了SQL语句的执行顺序、访问方法、访问顺序等信息。
在执行计划中,我们经常会遇到以下几种重要的概念:1. 访问方法,包括全表扫描、索引扫描、索引范围扫描、唯一索引扫描等。
不同的访问方法对于不同的查询条件和表结构会有不同的性能影响。
2. 访问顺序,包括顺序访问和随机访问。
顺序访问通常发生在全表扫描的情况下,而随机访问则通常发生在索引扫描的情况下。
顺序访问的性能往往优于随机访问。
3. 连接方法,包括嵌套循环连接、哈希连接和排序-合并连接。
不同的连接方法对于不同的连接条件和表大小会有不同的性能影响。
通过分析执行计划,我们可以了解SQL语句的执行状况,并且可以根据执行计划来进行SQL语句的优化。
比如,我们可以通过创建索引、重写SQL语句、调整统计信息等方式来改善执行计划,从而提升查询性能。
在实际的数据库应用中,执行计划往往是优化性能的关键。
一个高效的执行计划可以大大减少查询的响应时间,提升系统的整体性能。
因此,我们需要深入了解执行计划的生成原理和优化方法,以便能够更好地优化数据库应用。
总之,执行计划是数据库优化的重要工具,它可以帮助我们了解SQL语句的执行情况,并且可以指导我们进行优化工作。
通过深入研究执行计划,我们可以更好地掌握Oracle数据库的优化技巧,提升系统的性能和稳定性。
希望本文能够对大家对Oracle执行计划有所帮助,也希望大家能够在实际的数据库应用中灵活运用执行计划来优化系统性能。
oracle关于执行计划的字段解释说明
oracle关于执⾏计划的字段解释说明1create table dw_object as select*from dba_objects;2CREATE INDEX IDX_DW ON DW_OBJECT(OBJECT_ID);3exec dbms_stats.gather_table_stats(ownname=>'SCOTT',TABNAME=>'DW_OBJECT',CASCADE=>TRUE);---收集统计信息4SELECT*FROM DW_OBJECT WHERE OBJECT_ID IN (12,14);5select sql_text, sql_id,a.hash_value,child_number from v$sql a where sql_text like'%SELECT * FROM DW_OBJECT WHERE OBJECT_ID%';--获取sql_id6 SQL>SELECT*FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL,NULL,'advanced'));7 PLAN_TABLE_OUTPUT8--------------------------------------------------------------------------------9 SQL_ID 9m7787camwh4m, child number010begin :id := sys.dbms_transaction.local_transaction_id; end;11 NOTE: cannot fetch plan for SQL_ID: 9m7787camwh4m, CHILD_NUMBER: 012 Please verify value of SQL_ID and CHILD_NUMBER;13 It could also be that the plan is no longer in cursor cache (check v$sql_p148 rows selected1516 SQL>SELECT*FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR('271x26x15yk3b',0,'advanced'))172 ;18 PLAN_TABLE_OUTPUT19--------------------------------------------------------------------------------20 SQL_ID 271x26x15yk3b, child number021-------------------------------------22SELECT*FROM DW_OBJECT WHERE OBJECT_ID IN (12,14)23Plan hash value: 155755626924--------------------------------------------------------------------------------25| Id | Operation | Name | Rows | Bytes | Cost (%CPU)|26--------------------------------------------------------------------------------27|0|SELECT STATEMENT ||||4 (100)|28|1| INLIST ITERATOR |||||29|2|TABLE ACCESS BY INDEX ROWID| DW_OBJECT |2|194|4 (0)|30|*3|INDEX RANGE SCAN | IDX_DW |2||3 (0)|31--------------------------------------------------------------------------------32 Query Block Name / Object Alias (identified by operation id):33-------------------------------------------------------------341- SEL$1352- SEL$1/ DW_OBJECT@SEL$136 PLAN_TABLE_OUTPUT37--------------------------------------------------------------------------------383- SEL$1/ DW_OBJECT@SEL$139 Outline Data40-------------41/*+42 BEGIN_OUTLINE_DATA43 IGNORE_OPTIM_EMBEDDED_HINTS44 OPTIMIZER_FEATURES_ENABLE('11.2.0.1')45 DB_VERSION('11.2.0.1')46 ALL_ROWS47 OUTLINE_LEAF(@"SEL$1")48 INDEX_RS_ASC(@"SEL$1" "DW_OBJECT"@"SEL$1" ("DW_OBJECT"."OBJECT_ID"))49 END_OUTLINE_DATA50*/51 Predicate Information (identified by operation id):52---------------------------------------------------533- access(("OBJECT_ID"=12OR "OBJECT_ID"=14))54 PLAN_TABLE_OUTPUT55--------------------------------------------------------------------------------56Column Projection Information (identified by operation id):57-----------------------------------------------------------581- "DW_OBJECT"."OWNER"[VARCHAR2,30], "DW_OBJECT"."OBJECT_NAME"[VARCHAR2,128]59 "DW_OBJECT"."SUBOBJECT_NAME"[VARCHAR2,30], "OBJECT_ID"[NUMBER,22],60 "DW_OBJECT"."DATA_OBJECT_ID"[NUMBER,22], "DW_OBJECT"."OBJECT_TYPE"[VARCHA61 "DW_OBJECT"."CREATED"[DATE,7], "DW_OBJECT"."LAST_DDL_TIME"[DATE,7],62 "DW_OBJECT"."TIMESTAMP"[VARCHAR2,19], "DW_OBJECT"."STATUS"[VARCHAR2,7],63 "DW_OBJECT"."TEMPORARY"[VARCHAR2,1], "DW_OBJECT"."GENERATED"[VARCHAR2,1],64 "DW_OBJECT"."SECONDARY"[VARCHAR2,1], "DW_OBJECT"."NAMESPACE"[NUMBER,22],65 "DW_OBJECT"."EDITION_NAME"[VARCHAR2,30]662- "DW_OBJECT"."OWNER"[VARCHAR2,30], "DW_OBJECT"."OBJECT_NAME"[VARCHAR2,128]67 "DW_OBJECT"."SUBOBJECT_NAME"[VARCHAR2,30], "OBJECT_ID"[NUMBER,22],68 "DW_OBJECT"."DATA_OBJECT_ID"[NUMBER,22], "DW_OBJECT"."OBJECT_TYPE"[VARCHA69 "DW_OBJECT"."CREATED"[DATE,7], "DW_OBJECT"."LAST_DDL_TIME"[DATE,7],70 "DW_OBJECT"."TIMESTAMP"[VARCHAR2,19], "DW_OBJECT"."STATUS"[VARCHAR2,7],71 "DW_OBJECT"."TEMPORARY"[VARCHAR2,1], "DW_OBJECT"."GENERATED"[VARCHAR2,1],72 "DW_OBJECT"."SECONDARY"[VARCHAR2,1], "DW_OBJECT"."NAMESPACE"[NUMBER,22],73 "DW_OBJECT"."EDITION_NAME"[VARCHAR2,30]743- "DW_OBJECT".ROWID[ROWID,10], "OBJECT_ID"[NUMBER,22]7562 rows selected⼀、执⾏计划中字段说明ID:⼀个序号,但不是执⾏的先后顺序,执⾏的先后顺序是根据缩进来判断,最右最上的原则。
oracle执行计划怎么看
oracle执行计划怎么看Oracle执行计划是数据库优化调优中非常重要的一环,通过查看执行计划可以了解SQL语句的执行情况,以及是否存在性能瓶颈。
那么,我们应该如何来看Oracle执行计划呢?首先,我们需要知道执行计划是什么。
执行计划是Oracle数据库对SQL语句执行的一种解释,它告诉我们Oracle是如何执行SQL语句的,包括使用了哪些索引、连接方式、表的扫描顺序等信息。
通过执行计划,我们可以分析SQL语句的性能瓶颈,并进行相应的优化。
接下来,我们来看一下如何查看执行计划。
在Oracle中,我们可以使用explain plan语句来查看执行计划。
例如:```sql。
explain plan for。
SELECT FROM employees WHERE department_id = 20;```。
执行以上SQL语句后,可以使用如下语句来查看执行计划:```sql。
select from table(dbms_xplan.display);```。
通过以上命令,我们可以得到SQL语句的执行计划,包括每个步骤的操作类型、表的访问方式、访问行数等信息。
通过这些信息,我们可以分析SQL语句的执行情况,找出性能瓶颈所在。
在查看执行计划时,我们需要注意一些重要的信息。
首先是操作类型,常见的操作类型包括全表扫描、索引扫描、排序等。
不同的操作类型对性能的影响是不同的,我们需要根据实际情况进行分析和优化。
其次是访问方式,包括了表的访问顺序、连接方式等信息。
合理的访问方式可以提高SQL语句的执行效率。
最后是访问行数,通过访问行数我们可以了解SQL语句实际操作的数据量,从而评估SQL语句的性能。
除了使用explain plan语句来查看执行计划外,我们还可以通过SQL Developer等工具来可视化地查看执行计划。
这些工具可以直观地展现SQL语句的执行情况,帮助我们更好地进行性能优化。
在实际的优化过程中,我们还可以通过修改SQL语句、创建索引、重新设计表结构等方式来改善执行计划,从而提高SQL语句的执行效率。
oracle sql的执行计划
oracle sql的执行计划Oracle SQL的执行计划执行计划(Execution Plan)是Oracle数据库优化的关键,它能够帮助开发人员和数据库管理员理解查询的执行过程和资源消耗情况。
在Oracle中,执行计划由优化器生成,它会根据查询语句和数据库统计信息来选择最佳的执行路径,以获得最优的查询性能。
执行计划的生成是一个复杂的过程,涉及到很多因素。
下面我们将详细介绍执行计划的生成过程以及如何优化查询性能。
1. 查询解析在执行计划生成之前,首先需要对查询语句进行解析。
解析器会对查询语句进行语法分析和语义分析,确定查询的语义和结构。
这一步骤包括了对查询语句中的表名、列名、关键字等进行解析,并生成查询的语法树。
2. 查询优化一旦查询语句被解析成功,优化器将会根据查询的语义和结构,以及数据库统计信息,生成多个可能的执行计划。
优化器会根据一系列的优化规则和算法,对这些执行计划进行评估和比较,选择出最佳的执行计划。
在选择最佳执行计划时,优化器会考虑多个因素,包括但不限于:- 查询的复杂度- 查询中涉及的表的大小和索引情况- 查询中使用的函数和操作符的复杂度- 查询中的连接方式和连接顺序- 查询中使用的索引和索引选择性- 查询中的过滤条件和排序要求3. 执行计划生成一旦最佳执行计划被选择出来,优化器将会生成相应的执行计划。
执行计划是一个树状结构,由多个操作符(Operator)和操作数(Operand)组成。
每个操作符代表了一个具体的操作,比如表扫描、索引扫描、连接、排序等,而操作数则代表了操作所需要的输入。
执行计划的节点之间通过连接线相连,连接线上标注着数据的传递方向和操作的顺序。
执行计划从根节点开始执行,逐级向下执行,直到所有操作完成。
4. 执行计划的解读执行计划中的每个操作符都有自己的属性和统计信息,可以通过查看这些属性和统计信息来了解查询的执行情况和资源消耗情况。
常见的执行计划属性包括但不限于:- 表名和索引名- 扫描方式(全表扫描、索引扫描等)- 过滤条件和排序要求- 估计和实际的行数- CPU和I/O消耗等通过分析执行计划,我们可以判断查询是否存在性能问题,并根据执行计划的信息进行优化。
oracle sql执行计划解析
oracle sql执行计划解析在Oracle SQL中,执行计划是指数据库在执行查询时确定的操作顺序和方法。
通过解析执行计划,我们可以了解查询语句在数据库中的执行情况,从而进行性能优化和调优。
本文将对Oracle SQL执行计划进行解析,并解释各部分的含义。
执行计划通常以树状结构显示,包括多个步骤和子步骤。
其中,每个步骤表示一个数据库操作,如全表扫描、索引扫描或连接操作,而子步骤表示每个步骤的具体实现方式。
在执行计划中,每个步骤都有相应的成本和行数。
成本表示执行该步骤的开销,Oracle会根据成本选择最优的执行计划。
行数表示每个步骤返回的记录数,通过该值可以了解数据量的大小。
常见的执行计划操作包括:1. 全表扫描:遍历整个表,适用于查询需要扫描大部分或全部数据的情况。
如果全表扫描的行数较大,可能需要考虑添加索引或进行其他优化。
2. 索引扫描:使用索引进行查询,避免全表扫描。
索引的选择对查询性能至关重要,需要确保索引的正确创建和维护。
3. 连接操作:将多个表连接起来,通常通过嵌套循环连接或哈希连接实现。
连接操作的成本较高,特别是在大数据量情况下,需要优化连接的顺序和方式。
4. 排序操作:对结果进行排序,根据ORDER BY子句的要求执行。
排序可能需要大量的CPU和I/O资源,尤其是在大数据量或复杂查询的情况下。
5. 分组操作:根据GROUP BY子句对结果进行分组,并计算每个组的聚合值。
分组操作需要对数据进行排序,因此会产生一定的开销。
通过解析执行计划,我们可以分析查询的性能瓶颈,并根据需要进行调整。
例如,可以通过创建索引来改善查询性能,或者对复杂查询进行优化,减少不必要的操作和数据传输。
总之,执行计划是优化和调优Oracle SQL查询的重要工具。
通过仔细解析执行计划,我们可以确定查询的执行顺序和方法,并针对性地进行优化,以提高查询性能。
Oracle执行计划详解
索引唯一扫描(index unique scan)
索引范围扫描(index range scan)
索引全扫描(index full scan)
索引快速扫描(index fast full scan)
(1) 索引唯一扫描(index unique scan)
SQL> explain plan for select empno, ename from emp
where empno > 7876 order by empno;
Query Plan
--------------------------------------------------------------------------------
Oracle执行计划详解
简介:
本文全面详细介绍oracle执行计划的相关的概念,访问数据的存取方法,表之间的连接等内容。
并有总结和概述,便于理解与记忆!
+++
目录
---
一.相关的概念
Rowid的概念
RecursiveSql概念
Predicate(谓词)
DRiving Table(驱动表)
SELECT STATEMENT[CHOOSE] Cost=
TABLE ACCESS FULL DUAL
2) 通过ROWID的表存取(Table Access by ROWID或rowid lookup)
行的ROWID指出了该行所在的数据文件、数据块以及行在该块中的位置,所以通过ROWID来存取数据可以快速定位到目标数据上,是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):表示使用索引来加速查询。
索引操作包括索引扫描、索引唯一扫描等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
oracle执行计划解释一.相关概念1·rowid,伪列:就是系统自己给加上的,每个表都有一个伪列,并不是物理存在。
它不能被修改,删除,和添加,rowid在该行的生命周期是唯一的,如果向数据库插入一列,只会引起行的变化,但是rowid并不会变。
2·recursive sql概念:当用户执行一些SQL语句时,会自动执行一些额外的语句,我们把这些额外的SQL语句称为“recursive calls” 或者是“recursive sql statement”,当在执行一个DDL语句时,Oracle总会隐含的发出一些Recursiv sql语句,用于修改数据字典,如果数据字典没有在共享内存中,则就执行“resursive calls”,它会把数据字典从物理读取到共享内存。
当然DML和select语句都可能引起recursive SQL。
3·row source 行源:在查询中,由上一操作返回的符合条件的数据集,它可能是整个表,也可能是部分,当然也可以对2个表进行连接操作(join)最后得到的数据集4·predicate:一个查询中的where限制条件5·driving table 驱动表:该表又成为外层表,这个感念用于内嵌和HASH连接中,如果返回数据较大,会有负面影响,返回行数据较小的适合做驱动表6·probed table 被探查表:该表又称为内层表,我们在外层表中取得一条数据,在该表中寻找符合连接的条件的行。
7·组合索引(concatenated index)由多个列组成的索引,在组合索引中有一个重要的概念,就是引导索引,create index idx_tab on tab(col1,col2,col3),indx_tab则称为组合索引,col1则称为引导列在查询条件where后,必须使用引导索引,才会使用该组合索引8.可选择性(selectivity)比较一下列中唯一键的数量和表中的行数,就可以判断该列的可选择性。
如果该列的“唯一键的数量/表中的行数”的比值越接近1,则该列的可选择性越高,该列就越适合创建索引,同样索引的可选择性也越高。
在可选择性高的列上进行查询时,返回的数据就较少,比较适合使用索引查询。
二.Oracle访问数据的存取方法1.全表扫描(Full tabel scans,FTS)为了实现全表扫描,Oracle读取数据库中的每一行,并检查每一行是否满足语句的where限制条件一个多块读操作,可以使io能读取多块数据块。
减少了IO次数,提高了系统的吞吐量。
在多块读的方法的使用下,可以高效的实现数据库全表扫描,而且,中有在全表扫描的情况下,在可以使用多块读的方法。
在这个种访问模式下,数据块只读一次。
【注意】使用FTS的前提是,在较大的表中,不建议使用FTS,除非取出的数据较多,超过总量的5%-10%,或者使用并行查询时2.通过rowid的表存取行的ROWID指向了该行的数据文件,数据块,以及在数据块中的位置,使用rowid能快速的定位到要取得数据的行上,在Oracle中,这是取得单行最快的方式。
【注意】该存取方法,不会用到多块读操作,一次IO只能读取一个数据块。
3.索引扫描(index scan 和index lookup)索引扫描时通过index查找到对应行的rowid,然后通过rowid从数据库中得到具体的数据。
该方法分为两个步骤,(1)扫描索引得到得到rowid说明:索引中不止储存着索引值,还存放的行的rowid(2)通过rowid得到表中的数据【注意】1.由于索引经常使用,因此绝大多数都Cache到内存当中,所以第一步通常是逻辑IO,即数据可以从内存中取得2.但是对第二步来说,如果数据比较大,就不可能存放在内存,因此是个物理操作,是极其耗时间的,因此,从大表中进行索引扫描,如果数量大于总数的5%-10%,则效力会下降很多3.如果索引的数据都能在内存中能找到,就可以避免第二步操作,避免了不必要的IO。
效力会很高。
4.如果SQL语句会对索引排序,因为索引已经预先排好了序,索引在执行计划中不需要在对索引排序。
根据索引的类型与where限制条件的不同,有4种数据类型的索引1.唯一索引(index unique scan)通过唯一索引查找一个数值,通常是rowid,如果表中存在unique,或者是primary key的话,Oracle通常实现唯一索引;2.索引范围扫描(index range scan)如果要取得多行数据,通常在唯一索引上加上范围操作,例如(>,<)*使用index rang scan的三种情况(a)在唯一索引上有where条件筛选(b)在组合索引上,使用部分列进行查询,导致查询出多行(c)对非唯一索引列进行的任何查询3.索引全扫描(index full scan)与全表扫描想对应的就是全索引扫描,它必要保证要取得的数据都从索引中直接得到例:Index BE_IX is a concatenated index on big_emp (empno,ename)SQL> explain plan for select empno,ename from big_emp order by empno,ename;4.索引快速扫描(index fash full scan)索引快速扫描和index full scan相似,不会对查询出的数据进行排序。
三.表之间的连接根据row source连接的条件不同,可以分为等值连接(where a.col3=b.col4)非等值连接(where a.col3>b.col4)外连接(where a.col3=b.col4(+))1.典型的连接类型(a)排序--合并连接(sort merge join,SMJ)(b)嵌套循环(nested loops,NL)(c)哈希连接(hash join,)A.排序--合并连接1)首先生成row source1需要的数据,让后对连接关联的列进行排序。
2)然后生成row source2需要的数据,然后对这些数据按照与row socurce1相对应的操作关联列进行排序。
3)将两边排好序的数据进行合并操作,将2个row source按照连接条件连接起来。
[注意]·.如果row source已经在关联上列上被排序,那个连接操作就不会执行sort操作,将大大的提高效率,因为排序时极其消耗资源的,预先被排序的row source包括索引,或者已经排好序的列。
·.排序是非常耗时的操作,尤其是大表,基于这个原因,SMJ通常不是一个好的解决办法,如果排序的工作早已做好那将极大的提高效率·.对于非等值连接,这种连接方式的效率是比较高的。
B.嵌套循环。
在连接有驱动表的概念,实际上连接过程就是2层嵌套循环,外层表越小越好。
[执行原理]从内部表来看,需要得到外层表的每一行,去匹配内部表的所有行,因此保持外部表尽可能小,和高效率访问内部表,是连接性能的关键。
[优点]nested loops可以返回已经连接的行,而不必等待所有的行连接完,因此能快速响应,特别适合用在需要快速响应的语句中。
C.hash join较小的row source用来构建hash table和bitmap,而第二个用来被hansed,并与第一个生成的hash table进行匹配。
bitmap用来作为一种较快查询的方法,用来检查hash table是否有匹配的行,特别在表大的情况下,不能容纳在内存中,这个连接方法非常有效。
这个链接,也有驱动表的概念,有来构造hash table,bitmap的表叫驱动表,如果被构建的hash table,bitmap都能容纳在内存中,这个效率非常高。
【注意】1) 要使哈希连接有效,需要设置HASH_JOIN_ENABLED=TRUE,缺省情况下该参数为TRUE,另外,不要忘了还要设置hash_area_size参数,以使哈希连接高效运行,因为哈希连接会在该参数指定大小的内存中运行,过小的参数会使哈希连接的性能比其他连接方式还要低。
2)只能用于等值连接。
3)在2个较大的row source之间连接时会取得相对较好的效率,在一个row source较小时则能取得更好的效率。
解释结果:1.AND-EQUAL 该步骤具有两个或更多个子步骤,每一个子步骤返回一系列的ROWID.AND-EQUAL操作选择的是索引子操作返回的rowid2.BITMAPconversoin to rowids --将位图从位图索引转换成可以用于提取实际资料的一系列的ROWIDconversoin from rowids --将一系列的ROWID转换成位图表示conversoin count --对位图的行数进行统计index single scan --为单个索引提取位图index range scan --返回的位图是一定范围的关键值index full scan --扫描整个位图索引MERGE --合并两个位图,并作为一个位图返回结果Minus --该操作是merge的相反操作,而且可以具有两个或3个子操作并返回位图第一个子操作返回的位图用作起点,第一个位图减去第二个位图中提供所有行。
如果第二个位图为空,那么所有的null列也将被减去。
or --将两个位图作为输入3.connect by --分层提取行,因为查询采用了CONNECT BY C从句4.concatenaction --合并多个行集为一行。
5.count --计算从表中选择的行数stopkey --计算的行数被查询语句中的where 中的rownum所限制6.filter --将一系列的行数作为输入,并过滤到where从句查询而得到的结果7.first row --提取查询结果集的第一行8.for udpate -- 为提取的行加锁。
9.hash join --使用散列连接法连接两张表10.indexunique --从索引中查找唯一值range scan --从一定范围中查找,是按照升序的方式range scans desc --扫描行在一定范围之内,但是是按照降序的方式11.inlist iterator --在in谓词中为一个值执行一次或者多次操作13 intersection --将两个结果集合并成一个集,并返回在它们之间出现的共同的值14 merger join --提供共同值,用来连接两个结果集的结果。
是内连接output --外anit --反seml --半15 nested loops --该操作涉及到2个子操作,第一操作个返回一个行集,被用于行集中的每一行,执行第二个子操作。