If the SQL statement contains search conditions for indexed columns, the SQL Optimizer can use the following search strategies:
Search Condition |
Search Strategy of the SQL Optimizer |
Equality condition for the indexed columns |
Those rows whose keys are included in the associated inversion list are accessed. |
IN condition for indexed columns |
The system accesses those rows whose keys are included in the inversion lists. |
Range conditions with one condition only ( <, <=, >, >= ) for one of the two range limits (upper or lower limit) |
The system accesses those rows whose keys are included in the inversion lists that were determined by the range. |
Range conditions for which both range limits are specified. It is irrelevant to the selection of the search strategy whether this specification is made using a BETWEEN operator or using two conditions (<= or >= ) for the same column linked by AND. |
The system accesses those rows whose keys are included in the inversion lists that were determined by the range. |
In the case of the equality/IN conditions and the range conditions, there are also queries for which it is not necessary to access the rows, since all required values are already included in the inversion list(s).
The examples used to explain the SQL Optimizer are based on the demo database DEMODB and its demo data in the schema HOTEL.
Concepts of the Database System, Objects in the Schema HOTEL
SELECT * FROM hotel.customer
WHERE name = 'Wagner'
Qualification: name =
'Wagner'
Primary key of the table CUSTOMER: cno
Indexes of qualified columns: FULL_NAME_INDEX (name, firstname)
Search strategy used: RANGE CONDITION FOR
INDEX
Because the equality condition is only entered in the first index column, this SQL statement must be processed with a RANGE CONDITION – there can be a number of entries with the value Wagner in the index.
The start key is set in the first record, which fills the equality condition in the first index column (Wagner). The stop key is in the first record that does not fulfill the condition (Walker).
Result of the EXPLAIN Statement
TABLENAME |
COLUMN_OR_INDEX |
STRATEGY |
PAGECOUNT |
CUSTOMER |
FULL_NAME_INDEX |
RANGE CONDITION FOR INDEX |
34 |
|
NAME |
(USED INDEX COLUMN) |
|
|
|
RESULT IS NOT COPIED, |
|
SELECT * FROM hotel.customer
WHERE name IN ('Smith', 'Miller')
Qualification: name = IN ('Smith',
'Miller')
Primary key of the table CUSTOMER: cno
Indexes of qualified columns: FULL_NAME_INDEX (name, firstname)
Search strategy used: IN CONDITION FOR
INDEX
The SQL statement is processed with an IN condition. The SQL Optimizer also evaluated the corresponding RANGE condition, but this condition would be more costly for the values specified.
Result of the EXPLAIN Statement
TABLENAME |
COLUMN_OR_INDEX |
STRATEGY |
PAGECOUNT |
CUSTOMER |
FULL_NAME_INDEX |
IN CONDITION FOR INDEX |
34 |
|
NAME |
(USED INDEX COLUMN) |
|
|
|
RESULT IS NOT COPIED, |
|
Create a one-column index EMPLOYEE_ENO using the ENO column.
See also:
SQL Reference Manual, CREATE INDEX Statement (create_index_statement)
SELECT eno, hno FROM hotel.employee
WHERE eno >= 8
Qualification: eno =
8
Primary key of the table EMPLOYEE: hno, eno
Indexes of qualified columns: EMPLOYEE_ENO (eno)
Search strategy used: RANGE CONDITION FOR
INDEX
This SQL statement can be processed with an INDEX ONLY strategy because only columns from the index and the primary key can be entered in the SELECT list, and the primary key columns are also stored in the index tree
Access is by means of the index EMPLOYEE_ENO. The start key is set in the first record that fills the bigger condition – that is, for the value 8.The stop key is set in the last record of the index.
Result of the EXPLAIN Statement
TABLENAME |
COLUMN_OR_INDEX |
STRATEGY |
PAGECOUNT |
EMPLOYEE |
EMPLOYEE_ENO |
RANGE CONDITION FOR INDEX |
45 |
|
|
ONLY INDEX ACCESSED |
|
|
ENO |
(USED INDEX COLUMN) |
|
|
|
RESULT IS NOT COPIED, |
|
For a BETWEEN condition, the stop key is not set at the end of the index, but on the last entry that fulfills the RANGE condition.
You will find additional simple example SQL statements in the SQL Tutorial.
See also:
Search Conditions for Key Columns