基于ORACLE的应用系统很多性能问题,是由应用系统SQL性能低劣引起的,所以,SQL的性能优化很重要,分析与优化SQL的性能我们一般通过查看该SQL的执行计划,本文就如何看懂执行计划,以及如何通过分析执行计划对SQL进行优化做相应说明。
一、什么是执行计划(explain plan)
执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述。
二、如何查看执行计划
1: 在PL/SQL下按F5查看执行计划。第三方工具toad等。
很多人以为PL/SQL的执行计划只能看到基数、优化器、耗费等基本信息,其实这个可以在PL/SQL工具里面设置的。可以看到很多其它信息,如下所示
2: 在SQL*PLUS(PL/SQL的命令窗口和SQL窗口均可)下执行下面步骤
SQL>EXPLAIN PLAN FOR SELECT * FROM SCOTT.EMP; --要解析的SQL脚本 SQL>SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);
3: 在SQL*PLUS下(有些命令在PL/SQL下无效)执行如下命令:
SQL>SET TIMING ON --控制显示执行时间统计数据 SQL>SET AUTOTRACE ON EXPLAIN --这样设置包含执行计划、脚本数据输出,没有统计信息 SQL>执行需要查看执行计划的SQL语句 SQL>SET AUTOTRACE OFF --不生成AUTOTRACE报告,这是缺省模式 SQL> SET AUTOTRACE ON --这样设置包含执行计划、统计信息、以及脚本数据输出 SQL>执行需要查看执行计划的SQL语句 SQL>SET AUTOTRACE OFF SQL> SET AUTOTRACE TRACEONLY --这样设置会有执行计划、统计信息,不会有脚本数据输出 SQL>执行需要查看执行计划的SQL语句 SQL>SET AUTOTRACE TRACEONLY STAT --这样设置只包含有统计信息 SQL>执行需要查看执行计划的SQL语句
SET AUTOT[RACE] {ON | OFF | TRACE[ONLY]} [EXP[LAIN]] [STAT[ISTICS]]
参考文档:SQLPlus User’s Guide and Reference Release 11.1
注意:PL/SQL Developer 工具并不完全支持所有的SQL*Plus命令,像SET AUTOTRACE ON 就如此,在PL/SQL Developer工具下执行此命令会报错
SQL> SET AUTOTRACE ON;
Cannot SET AUTOTRACE
4:SQL_TRACE可以作为参数在全局启用,也可以通过命令形式在具体SESSION启用
4.1 在全局启用,在参数文件(pfile/spfile)中指定SQL_TRACE =true,在全局启用SQL_TRACE时会导致所有进程活动被跟踪,包括后台进程以及用户进程,通常会导致比较严重的性能问题,所以在生产环境要谨慎使用。
提示:通过在全局启用SQL_TRACE, 我们可以跟踪到所有后台进程的活动,很多在文档中的抽象说明,通过跟踪文件的实时变化,我们可以清晰的看到各个进程间的紧密协调。
4.2在当前SESSION级别设置,通过跟踪当前进程可以发现当前操作的后台数据库递归活动(这在研究数据库新特性时尤其有效),研究SQL执行时,发现后台
错误等。
SQL> ALTER SESSION SET SQL_TRACE=TRUE; SQL> SELECT * FROM SCOTT.EMP; SQL> ALTER SESSION SET SQL_TRACE =FALSE;
那么此时如何查看相关信息?不管你在SQL*PLUS抑或PL/SQL DEVELOPER工具里面执行上面脚本过后都看不到什么信息,你可以通过下面脚本查询到trace日志信息
SELECT T.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' || P.SPID || '.trc' TRACE_FILE_NAME FROM ( SELECT P.SPID FROM V$MYSTAT M, V$SESSION S, V$PROCESS P WHERE M.STATISTIC# =1 AND S.SID = M.SID AND P.ADDR = S.PADDR ) P, ( SELECT T.INSTANCE FROM V$THREAD T, V$PARAMETER V WHERE V.NAME ='thread' AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE)) ) I, (SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T
TKPROF的帮助信息如下
TKPROF 选项 选项 说明 TRACEFILE 跟踪输出文件的名称 OUTPUTFILE 已设置格式的文件的名称 SORT=option 语句的排序顺序 PRINT=n 打印前 n 个语句 EXPLAIN=user/password 以指定的用户名运行 EXPLAIN PLAN INSERT=filename 生成 INSERT 语句 SYS=NO 忽略作为用户 sys 运行的递归 SQL 语句 AGGREGATE=[Y|N] 如果指定 AGGREGATE = NO TKPROF 不聚集相同 SQL 文本的多个用户 RECORD=filename 记录在跟踪文件中发现的语句 TABLE=schema.tablename 将执行计划放入指定的表而不是缺省的PLAN_TABLE 可以在操作系统中键入 tkprof 以获得所有可用选项和输出的列表 注 排序选项有 排序 选项说明 prscnt execnt fchcnt 调用分析执行提取的次数 prscpu execpu fchcpu 分析执行提取所占用的 CPU 时间 prsela exela fchela 分析执行提取所占用的时间 prsdsk exedsk fchdsk 分析执行提取期间的磁盘读取次数 prsqry exeqry fchqry 分析执行提取期间用于持续读取的缓冲区数 prscu execu fchcu 分析执行提取期间用于当前读取的缓冲区数 prsmis exemis 分析执行期间库高速缓存未命中的次数 exerow fchrow 分析执行期间处理的行数 userid 分析游标的用户的用户 ID TKPROF 统计数据 Count: 执行调用数 CPU: CPU 的使用秒数 Elapsed: 总共用去的时间 Disk: 物理读取次数 Query: 持续读取的逻辑读取数 Current: 当前模式下的逻辑读取数 Rows: 已处理行数 TKPROF 统计信息 统计 含义 Count 分析或执行语句的次数以及为语句发出的提取调用数 CPU 每个阶段的处理时间以秒为单位如果在共享池中找到该语句对于分析阶段为 0 Elapsed 占用时间以秒为单位通常不是非常有用因为其它进程影响占用时间 Disk 从数据库文件读取的物理数据块如果该数据被缓冲则该统计可能很低 Query 为持续读取检索的逻辑缓冲区通常用于 SELECT 语句 Current 在当前模式下检索的逻辑缓冲区通常用于 DML 语句 Rows 外部语句所处理的行对于 SELECT 语句在提取阶段显示它对于 DML 语句在执行阶段显示它 Query 和Current 的总和为所访问的逻辑缓冲区的总数
执行下面命令:tkprof D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\TRACE/wgods_ora_3940.trc h:\out.txtoutputfile explain=etl/etl
执行上面命令后,可以查看生成的文本文件
TKPROF: Release 10.2.0.1.0 - Production on 星期三 5月 23 16:56:41 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. Trace file: D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\TRACE/wgods_ora_3940.trc Sort options: default ******************************************************************************** count = number of times OCI procedure was executed cpu = cpu time in seconds executing elapsed = elapsed time in seconds executing disk = number of physical reads of buffers from disk query = number of buffers gotten for consistent read current = number of buffers gotten in current mode (usually for update) rows = number of rows processed by the fetch or execute call ******************************************************************************** ALTER SESSION SET SQL_TRACE = TRUE call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 0 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 1 0.00 0.00 0 0 0 0 Misses in library cache during parse: 0 Misses in library cache during execute: 1 Optimizer mode: CHOOSE Parsing user id: 89 (ETL) ******************************************************************************** begin :id := sys.dbms_transaction.local_transaction_id; end; call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 2 0.00 0.00 0 0 0 0 Execute 2 0.00 0.00 0 0 0 2 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 0 0 0 2 Misses in library cache during parse: 0 Optimizer mode: CHOOSE Parsing user id: 89 (ETL) ******************************************************************************** SELECT * FROM SCOTT.EMP call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 2 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 1 0.00 0.00 0 7 0 14 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 4 0.00 0.00 0 7 0 14 Misses in library cache during parse: 1 Optimizer mode: CHOOSE Parsing user id: 89 (ETL) Rows Execution Plan ------- --------------------------------------------------- 0 SELECT STATEMENT MODE: CHOOSE 0 TABLE ACCESS MODE: ANALYZED (FULL) OF 'EMP' (TABLE) ******************************************************************************** ALTER SESSION SET SQL_TRACE = FALSE call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 1 0.00 0.00 0 0 0 0 Execute 1 0.00 0.00 0 0 0 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 2 0.00 0.00 0 0 0 0 Misses in library cache during parse: 1 Optimizer mode: CHOOSE Parsing user id: 89 (ETL) ******************************************************************************** OVERALL TOTALS FOR ALL NON-RECURSIVE STATEMENTS call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 5 0.00 0.00 0 0 0 0 Execute 5 0.00 0.00 0 0 0 2 Fetch 1 0.00 0.00 0 7 0 14 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 11 0.00 0.00 0 7 0 16 Misses in library cache during parse: 2 Misses in library cache during execute: 1 OVERALL TOTALS FOR ALL RECURSIVE STATEMENTS call count cpu elapsed disk query current rows ------- ------ -------- ---------- ---------- ---------- ---------- ---------- Parse 0 0.00 0.00 0 0 0 0 Execute 0 0.00 0.00 0 0 0 0 Fetch 0 0.00 0.00 0 0 0 0 ------- ------ -------- ---------- ---------- ---------- ---------- ---------- total 0 0.00 0.00 0 0 0 0 Misses in library cache during parse: 0 6 user SQL statements in session. 0 internal SQL statements in session. 6 SQL statements in session. 1 statement EXPLAINed in this session. ******************************************************************************** Trace file: D:\ORACLE\PRODUCT\10.2.0\DB_1\RDBMS\TRACE/wgods_ora_3940.trc Trace file compatibility: 10.01.00 Sort options: default 1 session in tracefile. 6 user SQL statements in trace file. 0 internal SQL statements in trace file. 6 SQL statements in trace file. 4 unique SQL statements in trace file. 1 SQL statements EXPLAINed using schema: ETL.prof$plan_table Default table was used. Table was created. Table was dropped. 58 lines in trace file. 0 elapsed seconds in trace file.
4.3跟踪其它用户的进程,在很多时候我们需要跟踪其它用户的进程,而不是当前用户,可以通过ORACLE提供的系统包
DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION来完成。
例如:
SELECT SID, SERIAL#, USERNAME FROM V$SESSION WHERE USERNAME = 'ETL' EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,TRUE); EXEC DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION(61,76,FALSE);
5 利用10046事件
ALTER SESSION SET TRACEFILE_IDENTIFIER = 10046; ALTER SESSION SET EVENTS='10046 trace name context forever, level 8'; SELECT * FROM SCOTT.EMP; ALTER SESSION SET EVENTS ='10046 trace name context off'; 然后你可以用脚本查看追踪文件的位置 SELECT T.VALUE || '/' || LOWER(RTRIM(I.INSTANCE, CHR(0))) || '_ora_' || P.SPID || '.trc' TRACE_FILE_NAME FROM ( SELECT P.SPID FROM V$MYSTAT M, V$SESSION S, V$PROCESS P WHERE M.STATISTIC# =1 AND S.SID = M.SID AND P.ADDR = S.PADDR ) P, ( SELECT T.INSTANCE FROM V$THREAD T, V$PARAMETER V WHERE V.NAME ='thread' AND (V.VALUE = 0 OR T.THREAD# = TO_NUMBER(V.VALUE)) ) I, (SELECT VALUE FROM V$PARAMETER WHERE NAME='user_dump_dest') T 查询结果为wgods_ora_28279.trc文件, 但是去相应目录却没有找到对应的追踪文件,而是如下trace文件:wgods_ora_28279_10046.trc
6 利用10053事件
有点类似10046,在此略过、
7 系统视图
通过下面一些系统视图,你可以看到一些零散的执行计划的相关信息,有兴趣的话可以多去研究一下。
SELECT * FROM V$SQL_PLAN SELECT * FROM V$RSRC_PLAN_CPU_MTH SELECT * FROM V$SQL_PLAN_STATISTICS SELECT * FROM V$SQL_PLAN_STATISTICS_ALL SELECT * FROM V$SQLAREA_PLAN_HASH SELECT * FROM V$RSRC_PLAN_HISTORY
三、看懂执行计划
1.执行顺序
执行顺序的原则是:由上至下,从右向左
由上至下:在执行计划中一般含有多个节点,相同级别(或并列)的节点,靠上的优先执行,靠下的后执行
从右向左:在某个节点下还存在多个子节点,先从最靠右的子节点开始执行。
当然,你在PL/SQL工具中也可以通过它提供的功能来查看执行顺序。如下图所示:
2.执行计划中字段解释
SQL>
名词解释:
recursive calls 递归调用
db block gets 从buffer cache中读取的block的数量当前请求的块数目,当前模式块意思就是在操作中正好提取的块数目,而不是在一致性读的情况下而产生的正常情况下,一个查询提取的块是在查询查询开始的那个时间点上存在的数据库,当前块是在这个时候存在数据块,而不是这个时间点之前或者之后的的数据块数目。
consistent gets 从buffer cache中读取的undo数据的block的数量数据请求总数在回滚段Buffer中的数据一致性读所需要的数据块,,这里的概念是在你处理你这个操作的时侯需要在一致性读状态上处理多个块,这些块产生的主要原因是因为你在查询过程中,由于其它会话对数据 块进行操作,而对所要查询的块有了修改,但是由于我们的查询是在这些修改之前调用的,所要需要对回滚 段中的数据块的前映像进行查询,以保证数据的一致性。这样就产生了一致性读。
physical reads 物理读 就是从磁盘上读取数据块的数量。其产生的主要原因是:
1:在数据库高速缓存中不存在这些块。
2:全表扫描
3:磁盘排序
redo size DML生成的redo的大小
sorts (memory) 在内存执行的排序量
sorts (disk) 在磁盘执行的排序量
2091 bytes sent via SQL*Net to client 从SQL*Net向客户端发送了2091字节的数据
416 bytes received via SQL*Net from client 客户端向SQL*Net发送了416字节的数据。
参考文档:SQLPlus User’s Guide and Reference Release 11.1
db block gets 、 consistent gets 、 physical reads这三者的关系可以概括为:逻辑读指的是ORACLE从内存读到的数据块块数量,一般来说是:
consistent gets + db block gets. 当在内存中找不到所需要的数据块的话,就需要从磁盘中获取,于是就产生了物理读。
3.具体内容查看
1> Plan hash Value
这一行是这一条语句的的hash值,我们知道ORACLE对每一条ORACLE语句产生的执行计划放在SHARE POOL里面,第一次要经过硬解析,产生hash值。下次再执行时比较hash值,如果相同就不会执行硬解析。
2> COST
COST没有单位,是一个相对值,是SQL以CBO方式解析执行计划时,供ORACLE来评估CBO成本,选择执行计划用的。没有明确的含义,但是在对比是就非常有用。
公式:COST=(Single Block I/O COST + MultiBlock I/O Cost + CPU Cost)/ Sreadtim
3> 对上面执行计划列字段的解释:
Id: 执行序列,但不是执行的先后顺序。执行的先后根据Operation缩进来判断(采用最右最上最先执行的原则看层次关系,在同一级如果某个动作没有子ID就最先执行。一般按缩进长度来判断,缩进最大的最先执行,如果有2行缩进一样,那么就先执行上面的。)
Operation:当前操作的内容。
Name:操作对象
Rows:也就是10g版本以前的Cardinality(基数),Oracle估计当前操作的返回结果集行数。
Bytes:表示执行该步骤后返回的字节数。
Cost(CPU):表示执行到该步骤的一个执行成本,用于说明SQL执行的代价。
Time:Oracle 估计当前操作的时间。
4.谓词说明:
Predicate Information (identified by operation id):
---------------------------------------------------
2 - filter("B"."MGR" IS NOT NULL)
4 - access("A"."EMPNO" = "B"."MGR")
Access: 表示这个谓词条件的值将会影响数据的访问路劲(全表扫描还是索引)。
Filter:表示谓词条件的值不会影响数据的访问路劲,只起过滤的作用。
在谓词中主要注意access,要考虑谓词的条件,使用的访问路径是否正确。
5、 动态分析
如果在执行计划中有如下提示:
Note
------------
-dynamic sampling used for the statement
这提示用户CBO当前使用的技术,需要用户在分析计划时考虑到这些因素。 当出现这个提示,说明当前表使用了动态采样。我们从而推断这个表可能没有做过分析。
这里会出现两种情况:
(1) 如果表没有做过分析,那么CBO可以通过动态采样的方式来获取分析数据,也可以或者正确的执行计划。
(2) 如果表分析过,但是分析信息过旧,这时CBO就不会在使用动态采样,而是使用这些旧的分析数据,从而可能导致错误的执行计划。
四、表访问方式
1.Full Table Scan (FTS) 全表扫描
2.Index Lookup 索引扫描
There are 5 methods of index lookup:
index unique scan --索引唯一扫描
通过唯一索引查找一个数值经常返回单个ROWID,如果存在UNIQUE或PRIMARY KEY约束(它保证了语句只存取单行的话),ORACLE
经常实现唯一性扫描
Method for looking up a single key value via a unique index. always returns a single value, You must supply AT LEAST the leading column of the index to access data via the index.
index range scan --索引局部扫描
Index range scan is a method for accessing a range values of a particular column. AT LEAST the leading column of the index must be supplied to access data via the index. Can be used for range operations (e.g. > < <> >= <= between) .
使用一个索引存取多行数据,在唯一索引上使用索引范围扫描的典型情况是在谓词(WHERE 限制条件)中使用了范围操作符号(如>, < <>, >=, <=,BWTEEN)
index full scan --索引全局扫描
Full index scans are only available in the CBO as otherwise we are unable to determine whether a full scan would be a good idea or not. We choose an index Full Scan when we have statistics that indicate that it is going to be more efficient than a Full table scan and a sort. For example we may do a Full index scan when we do an unbounded scan of an index and want the data to be ordered in the index order.
index fast full scan --索引快速全局扫描,不带order by情况下常发生
Scans all the block in the index, Rows are not returned in sorted order, Introduced in 7.3 and requires V733_PLANS_ENABLED=TRUE and CBO, may be hinted using INDEX_FFS hint, uses multiblock i/o, can be executed in parallel, can be used to access second column of concatenated indexes. This is because we are selecting all of the index.
index skip scan --索引跳跃扫描,where条件列是非索引的前提情况下常发生
Index skip scan finds rows even if the column is not the leading column of a concatenated index. It skips the first column(s) during the search.
3.Rowid 物理ID扫描
This is the quickest access method available.Oracle retrieves the specified block and extracts the rows it is interested in. --Rowid扫描是最快的访问数据方式
相关推荐
以下将详细阐述如何在Oracle命令行环境中查看实际的执行计划。 1. **登陆SQLPLUS**: SQLPLUS是Oracle提供的一种命令行工具,允许用户直接与数据库交互。首先,你需要在终端或命令提示符中启动SQLPLUS,通常输入`...
本篇文章将深入探讨如何使用PL/SQL来查看和理解Oracle的执行计划,以及优化器的工作原理。 首先,Oracle的优化方式主要有两种:规则基础优化(RBO,Rule-Based Optimization)和成本基础优化(CBO,Cost-Based ...
### Oracle如何使用AUTOTRACE查看执行计划 在Oracle数据库管理中,查看SQL语句的执行计划是一项重要的技能,这有助于优化查询性能、诊断性能问题等。AUTOTRACE是Oracle提供的一种强大的工具,用于自动展示SQL语句的...
执行计划:一条查询语句在ORACLE中的执行过程或访问路径的描述。1:在PL/SQL下按F5查看执行计划。第三方工具toad等。很多人以为PL/SQL的执行计划只能看到基数、优化器、耗费等基本信息,其实这个可以在PL/SQL工具里面...
"Oracle 执行计划详解" Oracle 执行计划是数据库性能优化的关键。为了更好地理解和优化 Oracle 数据库的执行计划,我们需要了解执行计划的生成过程、优化方法和执行计划的解读方法。 执行计划生成过程 执行计划的...
当查看执行计划时,右侧最顶层的操作是第一个被执行的。同一级别上,如果某个操作没有子 ID,則它将首先被执行。 简单的例子 例如,以下是一个简单的执行计划: Query Plan ------------------------------------...
Oracle执行计划参数解释,Oracle SQL优化的基础是看懂Oracle的执行计划,本文当系统整理了Oracle执行计划里面的各种参数。
执行计划揭示了Oracle如何处理一个SQL查询,包括数据的访问路径、使用的索引、排序方式以及表之间的连接顺序等。本文将深入探讨如何查看执行计划,并提供优化SQL的策略。 一、执行计划的概念 执行计划是Oracle...
本文档详细解释了 ORACLE 的执行计划背景知识,包括共享 SQL 语句、执行计划的存储和共享、绑定变量的使用、执行计划的生成和共享、执行计划的优化等方面的内容。 一、共享 SQL 语句 ORACLE 对相同的 SQL 语句进行...
总之,Oracle执行计划的稳定性与数据库性能紧密相关,理解并掌握优化器的工作原理以及如何控制执行计划的选择,是优化数据库性能的关键。在基于代价的优化器模式下,虽然存在执行计划不稳定的可能,但通过合理管理和...
在深入了解Oracle执行计划之前,我们先来了解一下几个重要的概念,这些概念对于理解执行计划至关重要。 **共享SQL语句**:为了提高性能并减少资源消耗,Oracle在第一次解析某个SQL语句后,会将其以及相应的执行计划...
Oracle数据库执行计划是数据库管理系统在处理SQL查询时所采用的一种策略,它决定了如何最有效地从数据库中检索数据。执行计划涉及到一系列的操作,包括数据的存取方法、索引的使用、连接操作以及优化器的选择。 ...
本文将详细介绍如何查看Oracle数据库中执行最慢和查询次数最多的SQL语句,以帮助DBA(数据库管理员)识别潜在的性能瓶颈。 首先,我们来看如何查询执行最慢的SQL语句。在Oracle中,可以使用`v$sqlarea`视图来获取...
oracle 执行计划详解 Oracle 执行计划是数据库性能调整的关键部分,对于想要学习 Oracle 数据库的朋友非常有帮助。下面是Oracle 执行计划的背景知识和重要概念。 共享 SQL 语句 Oracle 将 SQL 语句及解析后得到的...
Oracle 执行计划解读 Oracle 执行计划是一种查询执行路径的表示形式,它展示了 Oracle 数据库在执行查询时访问数据的路径。下面是 Oracle 执行计划的详细解读,包括执行计划的定义、访问数据的方式、执行计划层次...
Oracle的执行计划--下,Oracle的执行计划--下,Oracle的执行计划--下
Oracle SQL执行计划分析器功能的创建3步曲: 1 首先,编译XYG_ALD_SESS_PKG的Package头。 (XYG_ALD_SESS_PKG.sql) 2 接着要建立好下面的4个视图对象。因为XYG_ALD_SESS_PKG包体会用到。(View Create Script v...
本文将深入探讨Oracle的执行计划和表分区两个重要概念,以及它们如何影响数据库性能。 执行计划是Oracle数据库处理SQL查询的一种步骤序列,它详细描述了数据如何从表中提取、如何进行排序或聚合,以及如何返回到...