Explain Plan
Explain Plan
Purpose
Use the EXPLAIN PLAN statement to determine the execution plan Oracle Database follows to execute a
specified SQL statement. This statement inserts a row describing each step of the execution plan into a
specified table. You can also issue the EXPLAIN PLAN statement as part of the SQL trace facility.
This statement also determines the cost of executing the statement. If any domain indexes are defined
on the table, then user-defined CPU and I/O costs will also be inserted.
The definition of a sample output table PLAN_TABLE is available in a SQL script on your distribution
media. Your output table must have the same column names and data types as this table. The common
name of this script is UTLXPLAN.SQL. The exact name and location depend on your operating system.
Oracle Database provides information on cached cursors through several dynamic performance views:
• For information on the work areas used by SQL cursors, query V$SQL_WORKAREA.
• For information on the execution plan for a cached cursor, query V$SQL_PLAN.
• For execution statistics at each step or operation of an execution plan of cached cursors (for
example, number of produced rows, number of blocks read), query V$SQL_PLAN_STATISTICS.
• Execution statistics at each step or operation of an execution plan of cached cursors are
displayed in V$SQL_PLAN_MONITOR if the statement execution is monitored. You can force
monitoring using the MONITOR hint.
See Also:
• Oracle Database SQL Tuning Guide for information on the output of EXPLAIN PLAN, how to use
the SQL trace facility, and how to generate and interpret execution plans
Prerequisites
To issue an EXPLAIN PLAN statement, you must have the privileges necessary to insert rows into an
existing output table that you specify to hold the execution plan.
You must also have the privileges necessary to execute the SQL statement for which you are
determining the execution plan. If the SQL statement accesses a view, then you must have privileges to
access any tables and views on which the view is based. If the view is based on another view that is
based on a table, then you must have privileges to access both the other view and its underlying table.
To examine the execution plan produced by an EXPLAIN PLAN statement, you must have the privileges
necessary to query the output table.
The EXPLAIN PLAN statement is a data manipulation language (DML) statement, rather than a data
definition language (DDL) statement. Therefore, Oracle Database does not implicitly commit the changes
made by an EXPLAIN PLAN statement. If you want to keep the rows generated by
an EXPLAIN PLAN statement in the output table, then you must commit the transaction containing the
statement.
See Also:
INSERT and SELECT for information on the privileges you need to populate and query the plan table
Syntax
explain_plan::=
Semantics
Specify a value for the STATEMENT_ID column for the rows of the execution plan in the output table.
You can then use this value to identify these rows among others in the output table. Be sure to specify
a STATEMENT_ID value if your output table contains rows from many execution plans. If you omit this
clause, then the STATEMENT_ID value defaults to null.
Specify the name of the output table, and optionally its schema and database. This table must exist
before you use the EXPLAIN PLAN statement.
If you omit schema, then the database assumes the table is in your own schema.
The dblink can be a complete or partial name of a database link to a remote Oracle Database where the
output table is located. You can specify a remote output table only if you are using Oracle Database
distributed functionality. If you omit dblink, then the database assumes the table is on your local
database. See "References to Objects in Remote Databases" for information on referring to database
links.
If you omit INTO altogether, then the database assumes an output table named PLAN_TABLE in your
own schema on your local database.
• If statement includes the parallel_clause, then the resulting execution plan will indicate parallel
execution. However, EXPLAIN PLAN actually inserts the statement into the plan table, so that
the parallel DML statement you submit is no longer the first DML statement in the transaction.
This violates the Oracle Database restriction of one parallel DML statement in a single
transaction, and the statement will be executed serially. To maintain parallel execution of the
statements, you must commit or roll back the EXPLAIN PLAN statement, and then submit the
parallel DML statement.
• To determine the execution plan for an operation on a temporary table, EXPLAIN PLAN must be
run from the same session, because the data in temporary tables is session specific.
Examples
The following statement determines the execution plan and cost for an UPDATE statement and inserts
rows describing the execution plan into the specified plan_table table with the STATEMENT_ID value of
'Raise in Tokyo':
Copy
EXPLAIN PLAN
INTO plan_table
WHERE department_id =
The following SELECT statement queries the plan_table table and returns the execution plan and the
cost:
Copy
FROM plan_table
START WITH id = 0 AND statement_id = 'Raise in Tokyo'
ORDER BY id;
Copy
0 UPDATE STATEMENT 4
1 UPDATE EMPLOYEES 1
The value in the POSITION column of the first row shows that the statement has a cost of 4.
The sample table sh.sales is partitioned on the time_id column. Partition sales_q3_2000 contains time
values less than Oct. 1, 2000, and there is a local index sales_time_bix on the time_id column.
Copy
where :h represents an already declared bind variable. EXPLAIN PLAN executes this query
with PLAN_TABLE as the output table. The basic execution plan, including partitioning information, is
obtained with the following query:
Copy
partition_id
FROM plan_table;