Example of weight calculation
While the query in this example can look unwise, the query shows the weight calculation and the influence of the involved resources.
SQL query:
select* from dbtst180
where projno > ' '
and emstdate > 0
and empno > 0
and emendate = 0
and emendate > 0
Indexes:
Index 1: empno projno stdate endate
Index 2: endate projno stdate empno
The column weight depends on the type of the expression. For equal
expressions (
<col> = <…>
) the value of the resource
hint_idx_weight_equal
is taken. For range expressions
(like >=) the value of the resource
hint_idx_weight_range
is taken:
hint_idx_weight_equal = 1
hint_idx_weight_range = 1
hint_idx_weight_factor = 1
_index1: empno(1.000) projno(1.000) stdate(1.000) endate(2.000)
weight 5.000
_index2: endate(2.000) projno(1.000) stdate(1.000) empno(1.000)
weight 5.000
An index hint for index 1 is generated. Note that index 2 is probably better for this query:
hint_idx_weight_equal = 5
hint_idx_weight_range = 1
hint_idx_weight_factor = 1
_index1: empno(1.000) projno(1.000) stdate(1.000) endate(2.000)
weight 5.000
_index2: endate(6.000) projno(1.000) stdate(1.000) empno(1.000)
weight 9.000
Note: The weight for column endate is reduced from 6
(
weight_range
+
weight_equal
) to 2 (weight_range
+
weight_range
) because previous columns in the index
definition only had matches on range expressions. In that case, the
weight_equal
is reduced to
weight_range
.
An index hint for index 2 is generated.
hint_idx_weight_equal = 1
hint_idx_weight_range = 1
hint_idx_weight_factor = 0.5
_index1: empno(1.000) projno(0.500) stdate(0.250) endate(0.250)
weight 2.000
_index2: endate(2.000) projno(0.500) stdate(0.250) empno(0.125)
weight 2.875
An index hint for index 2 is generated.
hint_idx_weight_equal = 1
hint_idx_weight_range = 0
hint_idx_weight_factor = 1
_index1: empno(0.000) [stopped]
weight 0.000
_index2: endate(1.000) projno(0.000) [stopped]
weight 1.000
An index hint for index 2 is generated.
Note: If
hint_idx_weight_equal
and
hint_idx_weight_range
are set to
0
, no index hint based on the WHERE clause is generated.