The EXPLAIN utility statement describes the strategy used to access data in the following statements:
The description is stored as rows in a table which you can retrieve using a SELECT statement.
The EXPLAIN statement is a CA IDMS extension of the SQL standard.
To issue an EXPLAIN statement that specifies:
Additionally, if the table in which the access plan is to be stored is:
►►─── EXPLAIN ────────────────────────────────────────────────────────────────► ►─┬─ access-module-specification ───────────────────────────────────────┬────► └─ STATEMENT 'sql-statement' ─┬─────────────────────────────────────┬─┘ └─ STATEMENT NUMBER statement-number ─┘ ►─┬──────────────────────────────────────────────────────┬───────────────────► └─ INTO TABLE ─┬────────────────┬─── table-identifier ─┘ └─ schema-name. ─┘ ►─┬─────────────────────────────┬────────────────────────────────────────────►◄ └─ IN segment-name.area-name ─┘
Expansion of access-module-specification
►►─── ACCESS MODULE access-module-name ───────────────────────────────────────► ►─┬─────────────────────────────┬────────────────────────────────────────────► └─ VERSION am-version-number ─┘ ►─┬─────────────────────────┬────────────────────────────────────────────────►◄ │ ┌───── , ────┐ │ └─ MODULE ─▼─ rcm-name ─┴─┘
Identifies an access module to be explained. Expanded syntax for access-module-specification s presented immediately following the EXPLAIN syntax.
Directs CA IDMS to return the access strategy for the specified SQL statement. Sql-statement must be an explainable statement and must be enclosed in single quotation marks.
Assigns a reference number to the access plan for the statement specified in the STATEMENT parameter. The reference number is stored in the SECTION column in each row of the access plan.
Statement-number must be an integer in the range 0 through 32,767. If not specified, a value of 0 is returned.
Specifies the table in which CA IDMS is to store the access plan. If you do not include the INTO TABLE parameter in an EXPLAIN statement, table-identifier is 'ACCESS_PLAN'.
If table-identifier does not exist, CA IDMS automatically defines it in the dictionary using the column definitions described in "Usage" following these parameter descriptions. If table-identifier identifies an existing table, the table must be defined with the appropriate columns for storing the access plan.
Important! Do not specify "EXPLAIN" as the schema-name or table-identifier where you will store the access plan. This produces an error message. The syntax parser interprets this as an attempt to perform a second EXPLAIN.
Identifies the schema associated with the named table.
If you do not specify schema-name, it defaults to:
Identifies the area to be used for storing rows of the table named in the INTO TABLE parameter.
IN parameter information is used only when the INTO TABLE parameter identifies a table that does not exist.
If you do not specify the IN parameter, CA IDMS:
Parameters for Expansion of access-module-specification
Directs CA IDMS to describe the access strategy for all the explainable statements in the whole access module or in one or more specified RCMs in the access module.
Access-module-name must identify an access module stored in the DDLCATLOD area of the dictionary. Access modules in this area are represented in the SYSTEM.LOADHDR table.
Note: For more information about the SYSTEM.LOADHDR table, see SYSTEM.LOADHDR.
Specifies the version of the access module being explained.
If am-version-number is not specified, the version is 1.
Specifies one or more RCMs to be explained. CA IDMS will describe the access strategy for each explainable statement in each named RCM.
The SECTION value for the first explainable statement in the RCM is 0. The SECTION value for each succeeding explainable statement in the RCM is incremented by 1.
Rcm-name must identify an RCM included in the access module named in the ACCESS MODULE parameter. Multiple RCM names must be separated by commas.
If you do not specify the MODULE parameter with ACCESS MODULE, CA IDMS explains all the RCMs in the named access module.
Explainable Statements
The explainable statements are DECLARE CURSOR, DELETE, INSERT, SELECT, and UPDATE.
Table ACCESS_PLAN
The columns of the ACCESS_PLAN table are:
|
Column |
Data type |
Description |
|---|---|---|
|
DBNAME |
CHAR(8) |
Dictionary connection for the session in which EXPLAIN is issued |
|
ESTAMP |
TIMESTAMP |
Date and time EXPLAIN was issued |
|
SCHEMA |
CHAR(18) |
Access module schema or, if explaining a statement, current schema for the SQL session |
|
MODULE |
CHAR(8) |
Access module name or, if explaining a statement, IDMSEXPL |
|
VERSION |
SMALLINT |
Access module version or, if explaining a statement, 0 |
|
STAMP |
TIMESTAMP |
Date and time access module was created, or, if explaining a statement, the same value as ESTAMP |
|
PROGRAM |
CHAR(8) |
Program (RCM) name or, if explaining a statement, IDMSEXPL |
|
PVERSION |
SMALLINT |
Program (RCM) version or, if explaining a statement, 0 (if explaining an access module, a version number of 0 indicates that no RCM version was specified the RCM when included in the access module) |
|
PDICT |
CHAR(8) |
Program (RCM) dictionary or, if explaining a statement, blanks |
|
PSTAMP |
CHAR(20) |
Date and time the program (RCM) was created or, if explaining a statement, blanks |
|
SECTION |
SMALLINT |
Section number assigned to the SQLCSID field during program precompilation, or statement-number specified in the EXPLAIN statement |
|
COMMAND |
SMALLINT |
Internal command code indicating the type of statement being explained: 8—DECLARE CURSOR 9—DELETE (searched) 10—DELETE (positioned) 17—INSERT 25—SELECT 29—UPDATE (searched) 30—UPDATE (positioned) |
|
QBLOCK |
SMALLINT |
Query block number. Each query that the statement contains is assigned a block. Blocks are numbered beginning with 1. |
|
STEP |
SMALLINT |
Step number. This number denotes the sequence of the processing step within the query block. |
|
STYPE |
SMALLINT |
Step type. This denotes the type of processing for the step: 0—Null 1—Table access 2—Nested loop join 3—Merge join 4—Sort 5—Merge group 6—OR list |
|
PBLOCK |
SMALLINT |
Parent block number. Parent block numbers indicate nesting of multiple query blocks in a section. |
|
PSTEP |
SMALLINT |
Parent step number. Parent step numbers correlate rows of query blocks:
|
|
TSCHEMA |
CHAR(18) |
Schema-name qualifier of the accessed table or procedure. |
|
TABLE |
CHAR(18) |
Name of the accessed table or procedure. |
|
TSTAMP |
TIMESTAMP |
Date and time the accessed table or procedure was created or last altered, or the date and time the EXPLAIN was issued in case no table or procedure was accessed. |
|
ACMODE |
CHAR(1) |
Mode of access to the database record underlying the table, when STYPE is 1: 'A'—Area 'C'—CALC 'I'—Index 'M'—Set member 'N'—Insert 'O'—Set owner 'P'—Table procedure 'S'—Sequential 'T'—(Temporary table) |
|
ACNAME |
CHAR(18) |
Set or index name. |
|
LFS |
CHAR(1) |
Leaf scan indicator, when ACMODE is I. This indicates whether data is retrieved by sequential access to index leaf pages. 'N'—No 'Y'—Yes |
|
SORTC |
CHAR(1) |
Composite sort type. A nonblank value in this field indicates an actual sort is required (data cannot be accessed in sort order). 'D'—Distinct 'G'—Group 'M'—Merge join 'O'—Order by |
|
SORTN |
CHAR(1) |
Inner sort type. This is an actual sort performed for the inner loop of a merge join. 'M'—Merge join |
|
SUBQC |
CHAR(1) |
Subquery correlation. 'N'—Not correlated 'Y'—Correlated |
Step types
Values in the STYPE column describe the type of processing:
|
Step type |
Meaning |
|---|---|
|
1 (Table access) |
Access to a single table |
|
2 (Nested loop join) |
Join using linked constraint |
|
3 (Merge join) |
Join by scanning both tables and sorting the entire result |
|
4 (Sort) |
Sort required by an ORDER BY parameter |
|
5 (Merge group) |
Sorting required by an aggregate function on distinct column values with the grouped results |
|
6 (OR list) |
Sorting required by one or more OR operators in a WHERE clause |
Alternatives to the Default ACCESS_PLAN Table
You can use SQL procedures to tailor the way you retrieve and present access strategy information. You can also:
Managing the Contents of an ACCESS_PLAN Table
Each time an EXPLAIN statement is executed; it inserts rows into an ACCESS_PLAN table. Periodically, contents of the table should be deleted using the DELETE statement.
Enhancing the Presentation of Access Strategy Information
Enhancing the Presentation of Access Strategy Information contains an SQL script with the definitions and data for a view that returns the access strategy information in an easy-to-read and understandable format.
Explaining RCMs in an Access Module
The following EXPLAIN statement returns the access strategy for each explainable statement in the EMPDSP01, EMPDSP02, and EMPDSP03 RCMs in the EMPAM001 access module. CA IDMS stores the access strategy in a table named EMPAM001_ACCESS.
explain access module empam001 module empdsp01, empdsp02, empdsp03 into table empam001_access;
Explaining a Specified Statement
The following EXPLAIN statement returns an access strategy for the specified SELECT statement. The access plan is identified by the reference number 4. By default, CA IDMS stores the access strategy in the ACCESS_PLAN table.
explain statement 'select e1.emp_id
from employee e1, position p1
where e1.emp_id = p1.emp_id
and p1.salary_amount >
(select p2.salary_amount
from employee e2, position p2
where e1.emp_id = e2.emp_id
and e2.manager_id = p2.emp_id)'
statement number 4;
|
Copyright © 2014 CA.
All rights reserved.
|
|