ASA SQL User's Guide
Query Optimization and Execution
The optimizer can tell you the query optimization strategy (plan) it has chosen in response to any statement.
The optimizer's job is to understand the semantics of your query and to construct a plan that computes its result. This plan may not correspond exactly to the syntax you used. The optimizer is free to rewrite your query in any semantically equivalent form.
For more information about the rules Adaptive Server Anywhere obeys when rewriting your query, see Rewriting subqueries as EXISTS predicates and Semantic query transformations.
For information about the methods that the optimizer uses to implement your query, see Query execution algorithms.
You can view the plan in Interactive SQL or using SQL functions. You can choose to retrieve the access plan in several different formats:
Short text
Long text
Graphical
Graphical with statistics
UltraLite (short, long, or graphical)
As well, you can obtain plans for SQL queries with a particular cursor type.
For more information about how to access the plan, see Accessing the plan. For information about how to read plans, see Text plans and Graphical plans.
Following is an explanation of the statistics and other items that are displayed in access plans.
Following are the abbreviations that are used in short plan, and in the short name form of the graphical plans:
Name | Short Plan / Short name |
---|---|
Hash except all | EAH |
Hash except | EH |
Hash group by | GrByH |
Hash rollup group by | GrByHR |
Ordered group by | GrByO |
Ordered rollup group by | GrByOR |
Single row group by | GrByS |
Indexed group by | GrByI |
Hash distinct | DistH |
Indexed distinct | DistI |
Ordered distinct | DistO |
Sort Top N | StrN |
Hash filter | HF |
Hash intersect all | IAH |
Hash intersect | IH |
Exists join | JE |
Nested loops semijoin | JNLS |
Hash exists | JHE |
Hash not exists | JHNE |
Hash join | JH |
Sorted block | SrtBl |
Left outer hash join | JHO |
Full outer hash join | JHFO |
Recursive hash join | JHR |
Left outer recursive hash join | JHRO |
Nested block join | JNB |
Left outer nested block join | JNBO |
Not exists join | JNE |
Nested loops join | JNL |
Left outer nested loops join | JNLO |
Full outer nested loops join | JNLFO |
Merge join | JM |
Left outer merge join | JMO |
Full outer merge join | JMFO |
Merge except | EM |
Merge except all | EAM |
Merge intersect | IM |
Merge intersect all | IAM |
Row limit | RL |
Row replicate | RR |
Recursive table | RT. In short plan is rt<seq> |
Recursive union | RU |
Union all | UA |
Table scan | In short plan is tablename<seq>. In graphical plans is just the table name. |
Index scan | In short plan is tablename<indexname>. In graphical plans is just the table name. |
In list | IN |
For an explanation of the algorithms, see Query execution algorithms.
The following statistics are actual, measured amounts.
Statistic | Explanation |
---|---|
Invocations | Number of times a row was requested from the sub tree. |
RowsReturned | Number of rows returned for the current node. |
RunTime | Time required for execution of the sub-tree, including time for children. |
CacheHits | Number of successful reads of the cache. |
CacheRead | Number of database pages that have been looked up in the cache. |
CacheReadTable | Number of table pages that have been read from the cache. |
CacheReadIndLeaf | Number of index leaf pages that have been read from the cache. |
CacheReadIndInt | Number of index internal node pages that have been read from the cache. |
DiskRead | Number of pages that have been read from disk. |
DiskReadTable | Number of table pages that have been read from disk. |
DiskReadIndLeaf | Number of index leaf pages that have been read from disk. |
DiskReadIndInt | Number of index internal node pages that have been read from disk. |
DiskWrite | Number of pages that have been written to disk (work table pages or modified table pages). |
IndAdd | Number of entries that have been added to indexes. |
IndLookup | Number of entries that have been looked up in indexes. |
FullCompare | Number of comparisons that have been performed beyond the hash value in an index. |
Statistic | Explanation |
---|---|
EstRowCount | Estimated number of rows that the node will return each time it is invoked. |
AvgRowCount | Average number of rows returned on each invocation. This is not an estimate, but is calculated as RowsReturned / Invocations. If this value is significantly different from EstRowCount, the selectivity estimates may be poor. |
EstRunTime | Estimated time required for execution (sum of EstDiskReadTime, EstDiskWriteTime, and EstCpuTime). |
AvgRunTime | Average time required for execution (measured). |
EstDiskReads | Estimated number of read operations from the disk. |
AvgDiskReads | Average number of read operations from the disk (measured). |
EstDiskWrites | Estimated number of write operations to the disk. |
AvgDiskWrites | Average number of write operations to the disk (measured). |
EstDiskReadTime | Estimated time required for reading rows from the disk. |
EstDiskWriteTime | Estimated time required for writing rows to the disk. |
EstCpuTime | Estimated processor time required for execution. |
Item | Explanation |
---|---|
Optimization Goal | Determines whether query processing is optimized towards returning the first row quickly, or minimizing the cost of returning the complete result set. |
ANSI update constraints | Controls the range of updates that are permitted (options are OFF, CURSORS, and STRICT). |
Optimization level | Reserved for future use. |
Select list | List of expressions selected by the query. |
Item | Explanation |
---|---|
Locked tables | List of all locked tables and their isolation levels. |
Item | Explanation |
---|---|
Table name | Actual name of the table. |
Correlation name | Alias for the table. |
Estimated rows | Estimated number of rows in the table. |
Estimated pages | Estimated number of pages in the table. |
Estimated row size | Estimated row size for the table. |
Page maps | YES when a page map is used to read multiple pages. |
Item | Explanation |
---|---|
Index name | Name of the index. |
Key type | Can be one of PRIMARY KEY, FOREIGN KEY, CONSTRAINT (unique constraint), or UNIQUE (unique index). The key type is not displayed if the index is a non-unique secondary index. |
Depth |
Height of the index.
For more information, see Table and page sizes. |
Estimated leaf pages | Estimated number of leaf pages. |
Cardinality | The cardinality of the index if it is different from the estimated number of rows. This applies only to Adaptive Server Anywhere databases version 6.0 and earlier. |
Selectivity | The estimated number of rows that match the range bounds. |
Direction | FORWARD or BACKWARD. |
Range bounds | Range bounds are shown as a list (col_name=value) or col_name IN [low, high]. |
Item | Explanation |
---|---|
Predicate |
The search condition that is evaluated in this node, along with selectivity estimates and measurement.
For more information, see Selectivity in the plan |
Item | Explanation |
---|---|
Build values | Estimated number of distinct values in the input. |
Probe values | Estimated number of distinct values in the input when checking the predicate. |
Bits | Number of bits selected to build the hash map. |
Pages | Number of pages required to store the hash map. |
Item | Explanation |
---|---|
Union List | The columns involved in a UNION operation. |
Item | Explanation |
---|---|
Aggregates | All the aggregate functions. |
Group-by list | All the columns in the group by clause. |
Item | Explanation |
---|---|
Distinct list | All the columns in the distinct clause. |
Item | Explanation |
---|---|
In List | All the expressions in the specified set. |
Expression SQL | Expressions to compare to the list. |
Item | Explanation |
---|---|
Order-by | List of all expressions to sort by. |
Item | Explanation |
---|---|
Row limit count | Maximum number of rows returned as specified by FIRST or TOP n. |
Text plans
Graphical plans
Accessing the plan