Liste der indexfähigen / stage-1-fähigen Bedingungen




In den nachfolgenden Tabellen ist aufgelistet, welche WHERE-Bedingungen stage-1 fähig sind und welche darüber hinaus index-fähig sind.
Früher wurden hier noch die Begriffe sargable und non-sargable verwendet. ( sargable = search-argumentable ).
Grundsätzlich sollten Sie versuchen alle Bedingungen stage-1 fähig zu machen. Die stage-1 ( der Data Manager ) arbeitet schneller als die stage-2 ( RDS ), selbst wenn kein Index zur Verfügung steht. Ausserdem ist nur die stage-1 in der Lage, einen Index zu benutzen.


indexfähige Abfragen

Bedingung Fussnote
spalte = value
spalte = noncol expr 9, 11, 12
spalte IS NULL
spalte op value
spalte op noncol expr 9, 11, 12
spalte BETWEEN value1 AND value2
spalte BETWEEN noncol expr1 AND noncol expr2 9, 11, 12
spalte LIKE 'pattern' 6
spalte IN (list)
spalte LIKE host variable 2, 6
T1.spalte = T2.spalte 5
T1.spalte op T2.spalte 3
spalte = (non subq) 4
spalte op (non subq) 4
spalte IN (non subq)


nicht indexfähige, aber stage-1-fähige Abfragen

Bedingung Fussnote
spalte <> value 8
spalte <> noncol expr 8, 11, 12
spalte IS NOT NULL
spalte NOT BETWEEN value1 AND value2
spalte NOT BETWEEN noncol expr1 AND noncol expr2 11, 12
spalte NOT IN (list)
spalte NOT LIKE 'any-char' 6
spalte LIKE '%char' 1, 6
spalte LIKE '_char' 1, 6
T1.spalte <> T2.spalte 3
spalte <> (non subq)


nicht indexfähige und nicht stage-1-fähige Abfragen

Bedingung Fussnote
value BETWEEN spalte1 AND spalte2
spalte BETWEEN spalte1 AND spalte2 10
spalte BETWEEN Ausdruck1 AND Ausdruck2 7
value NOT BETWEEN spalte1 AND spalte2
T1.spalte1 = T1.spalte2
T1.spalte1 op T1.spalte2
T1.spalte1 <> T1.spalte2
spalte = ANY (non subq) / spalte = ALL (non subq)
spalte op ANY (non subq) / spalte op ALL (non subq)
spalte <> ANY (non subq) / spalte <> ALL (non subq)
spalte NOT IN (non subq)
Jede Abfrage mit einer cor subq
spalte = Ausdruck 7
Ausdruck = value
Ausdruck <> value
Ausdruck op value
Ausdruck op (subq)



es gilt:
value = Konstante, Host-Variable oder special register
pattern = ein beliebiger Character-String, der nicht mit den Sonderzeichen % oder _ beginnt
any-char = ein beliebiger character-string
char = ein beliebiger Character-String, der nicht die Sonderzeichen % oder _ enthält
Ausdruck = ein beliebiger Ausdruck ( kann arithmetic operators, scalar functions, spalteumn functions, concatenation operators, Spaltennamen, Konstanten, Host-Variablen, special registers, oder date-time expressions enthalten )
noncol expr = ein beliebiger Ausdruck, der jedoch keine Spaltennamen beinhalten darf ( kann also arithmetic operators, scalar functions, concatenation operators, Konstanten, Host-Variablen, special registers oder date-time expressions enthalten)
op = Ein beliebiger Vergleichsoperator ausser = und <> ( also >, >=, <, <=, ¬>, ¬< )
spalte = Name einer Spalte
cor subq = correlated subquery
non subq = noncorrelated subquery
subq = eine beliebige subquery


Fussnoten:

1: Indexable, sofern die Escape-Klausel verwendet wird ( d.h. das Zeichen % oder _ nicht als Joker dient )
2: Indexable je nach Inhalt der Host-Variablen ( bei Bind-Option: REOPT VARS )
3: sofern die Variablen gleiche Attribute haben ( gleicher Typ und gleiche Länge )
4: nicht stage-1 und nicht indexable, wenn die Spalte NOT NULL definiert ist, das Ergebnis des Selects jedoch NULL sein kann
5: bei numerischen Spalten müssen Datentyp und Länge übereinstimmen
6: nicht stage-1 / nicht indexable, wenn die Spalte eine Feldprozedur besitzt
7: Ausnahme: die Spalte ist INTEGER / SMALLINT und Ausdruck ist 'numerische-Konstante +/-/*/: numerische-Konstante' oder die Spalte ist ein DATETIME Typ und Ausdruck ist datetime-scalar-function(character-constant) +/- labeled-duration
8: "spalte <> value" ist gleichbedeutend mit NOT spalte = value etc.
9: nicht indexable, wenn exp + 0 ; exp - 0 ; exp * 1 ; exp / 1 ; exp CONCAT leerer String
10: unabhängig davon, ob die die Spalten zur gleichen Tabelle gehören oder nicht
11: sofern Datentyp und Länge übereinstimmen
12: sofern keine CASE-Klausel verwendet wird


Zurück zu DB2 Home Impressum / Datenschutz