EXPLAIN directives
You can use the EXPLAIN directives to display the query plan that the optimizer chooses, and you can specify to display the query plan without running the query.
You can use these directives:
- EXPLAIN
Displays the query plan that the optimizer chooses.
- EXPLAIN AVOID_EXECUTE
Displays the query plan that the optimizer chooses, but does not run the query.
When you want to display the query plan for one SQL statement only, use these EXPLAIN directives instead of the SET EXPLAIN ON or SET EXPLAIN ON AVOID_EXECUTE statements.
When you use AVOID_EXECUTE (either the directive or in the SET
EXPLAIN statement), the query does not execute but displays the following
message:
No rows returned.
Result
of EXPLAIN AVOID_EXECUTE directives shows sample
output for a query that uses the EXPLAIN AVOID_EXECUTE directive.
The following table describes the pertinent output lines in Result
of EXPLAIN AVOID_EXECUTE directives that describe the chosen
query plan.
Output Line in Result of EXPLAIN AVOID_EXECUTE directives | Chosen Query Plan Description |
---|---|
DIRECTIVES FOLLOWED: EXPLAIN AVOID_EXECUTE |
Use the directives EXPLAIN and AVOID_EXECUTE to display the query plan and do not execute the query. |
Estimated # of Rows Returned: 7 |
Estimate that this query returns seven rows. |
Estimated Cost: 7 |
This estimated cost of 7 is a
value that the optimizer uses to compare different query plans and
select the one with the lowest cost. |
1) informix.r: SEQUENTIAL SCAN |
Use the cust_calls r table as the outer table and scan it to obtain each row. |
2) informix.l: INDEX PATH |
For each row in the outer table, use an index to obtain the matching row(s) in the inner table customer l. |
(1) Index Keys: customer_num (Serial,
fragments: ALL) |
Use the index on the customer_num column, scan it serially, and scan all fragments (the customer l table consists of only one fragment). |
Lower Index Filter: informix.l.customer_num
= informix.r.customer_num |
Start the index scan at the customer_num value from the outer table. |